Task Manager

// MainActivity.java package com.example.taskmanager; import android.content.ContentValues; import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Spinner; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.Locale; import java.util.Map; public class MainActivity extends AppCompatActivity { private EditText taskNameEditText; private DatePicker dueDatePicker; private Spinner prioritySpinner; private Button saveTaskButton; private ListView tasksListView; private SQLiteDatabase database; private ArrayList tasksList; private SimpleAdapter adapter; private static final String DATABASE_NAME = "TaskManager"; private static final String TABLE_TASKS = "tasks"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; private static final String COLUMN_DATE = "date"; private static final String COLUMN_PRIORITY = "priority"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initialize UI elements taskNameEditText = findViewById(R.id.taskNameEditText); dueDatePicker = findViewById(R.id.dueDatePicker); prioritySpinner = findViewById(R.id.prioritySpinner); saveTaskButton = findViewById(R.id.saveTaskButton); tasksListView = findViewById(R.id.tasksListView); // Set up priority spinner ArrayAdapter priorityAdapter = ArrayAdapter.createFromResource( this, R.array.priority_levels, android.R.layout.simple_spinner_item); priorityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); prioritySpinner.setAdapter(priorityAdapter); // Create or open the database database = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); // Create the tasks table if it doesn't exist database.execSQL( "CREATE TABLE IF NOT EXISTS " + TABLE_TASKS + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT, " + COLUMN_DATE + " TEXT, " + COLUMN_PRIORITY + " TEXT)"); // Initialize tasks list and adapter tasksList = new ArrayList(); adapter = new SimpleAdapter( this, tasksList, R.layout.task_item, new String[]{"name", "date", "priority", "id"}, new int[]{R.id.taskNameTextView, R.id.taskDateTextView, R.id.taskPriorityTextView, R.id.taskIdTextView} ); tasksListView.setAdapter(adapter); loadTasks(); // Load existing tasks // Save task button click listener saveTaskButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { saveTask(); } }); // Set item click listener for editing or deleting tasks tasksListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { showTaskOptionsDialog(position); } }); } private String getFormattedDate() { int day = dueDatePicker.getDayOfMonth(); int month = dueDatePicker.getMonth(); int year = dueDatePicker.getYear(); Calendar calendar = Calendar.getInstance(); calendar.set(year, month, day); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); return dateFormat.format(calendar.getTime()); } private void saveTask() { String taskName = taskNameEditText.getText().toString().trim(); String dueDate = getFormattedDate(); String priority = prioritySpinner.getSelectedItem().toString(); if (taskName.isEmpty()) { Toast.makeText(this, "Please enter a task name", Toast.LENGTH_SHORT).show(); return; } ContentValues values = new ContentValues(); values.put(COLUMN_NAME, taskName); values.put(COLUMN_DATE, dueDate); values.put(COLUMN_PRIORITY, priority); long result = database.insert(TABLE_TASKS, null, value

Apr 16, 2025 - 04:56
 0
Task Manager

// MainActivity.java

package com.example.taskmanager;

import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private EditText taskNameEditText;
    private DatePicker dueDatePicker;
    private Spinner prioritySpinner;
    private Button saveTaskButton;
    private ListView tasksListView;

    private SQLiteDatabase database;
    private ArrayList> tasksList;
    private SimpleAdapter adapter;

    private static final String DATABASE_NAME = "TaskManager";
    private static final String TABLE_TASKS = "tasks";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_NAME = "name";
    private static final String COLUMN_DATE = "date";
    private static final String COLUMN_PRIORITY = "priority";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize UI elements
        taskNameEditText = findViewById(R.id.taskNameEditText);
        dueDatePicker = findViewById(R.id.dueDatePicker);
        prioritySpinner = findViewById(R.id.prioritySpinner);
        saveTaskButton = findViewById(R.id.saveTaskButton);
        tasksListView = findViewById(R.id.tasksListView);

        // Set up priority spinner
        ArrayAdapter priorityAdapter = ArrayAdapter.createFromResource(
                this, R.array.priority_levels, android.R.layout.simple_spinner_item);
        priorityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        prioritySpinner.setAdapter(priorityAdapter);

        // Create or open the database
        database = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);

        // Create the tasks table if it doesn't exist
        database.execSQL(
                "CREATE TABLE IF NOT EXISTS " + TABLE_TASKS + " (" +
                        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        COLUMN_NAME + " TEXT, " +
                        COLUMN_DATE + " TEXT, " +
                        COLUMN_PRIORITY + " TEXT)");

        // Initialize tasks list and adapter
        tasksList = new ArrayList<>();
        adapter = new SimpleAdapter(
                this,
                tasksList,
                R.layout.task_item,
                new String[]{"name", "date", "priority", "id"},
                new int[]{R.id.taskNameTextView, R.id.taskDateTextView, R.id.taskPriorityTextView, R.id.taskIdTextView}
        );
        tasksListView.setAdapter(adapter);

        loadTasks(); // Load existing tasks

        // Save task button click listener
        saveTaskButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                saveTask();
            }
        });

        // Set item click listener for editing or deleting tasks
        tasksListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                showTaskOptionsDialog(position);
            }
        });
    }

    private String getFormattedDate() {
        int day = dueDatePicker.getDayOfMonth();
        int month = dueDatePicker.getMonth();
        int year = dueDatePicker.getYear();

        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month, day);

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        return dateFormat.format(calendar.getTime());
    }

    private void saveTask() {
        String taskName = taskNameEditText.getText().toString().trim();
        String dueDate = getFormattedDate();
        String priority = prioritySpinner.getSelectedItem().toString();

        if (taskName.isEmpty()) {
            Toast.makeText(this, "Please enter a task name", Toast.LENGTH_SHORT).show();
            return;
        }

        ContentValues values = new ContentValues();
        values.put(COLUMN_NAME, taskName);
        values.put(COLUMN_DATE, dueDate);
        values.put(COLUMN_PRIORITY, priority);

        long result = database.insert(TABLE_TASKS, null, values);

        if (result != -1) {
            Toast.makeText(this, "Task saved successfully", Toast.LENGTH_SHORT).show();
            taskNameEditText.setText("");
            loadTasks();
        } else {
            Toast.makeText(this, "Failed to save task", Toast.LENGTH_SHORT).show();
        }
    }

    private void loadTasks() {
        tasksList.clear();

        Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_TASKS, null);

        if (cursor.moveToFirst()) {
            int idIndex = cursor.getColumnIndex(COLUMN_ID);
            int nameIndex = cursor.getColumnIndex(COLUMN_NAME);
            int dateIndex = cursor.getColumnIndex(COLUMN_DATE);
            int priorityIndex = cursor.getColumnIndex(COLUMN_PRIORITY);

            // Only proceed if all column indices are valid
            if (idIndex >= 0 && nameIndex >= 0 && dateIndex >= 0 && priorityIndex >= 0) {
                do {
                    int id = cursor.getInt(idIndex);
                    String name = cursor.getString(nameIndex);
                    String date = cursor.getString(dateIndex);
                    String priority = cursor.getString(priorityIndex);

                    Map task = new HashMap<>();
                    task.put("id", String.valueOf(id));
                    task.put("name", name);
                    task.put("date", "Due: " + date);
                    task.put("priority", "Priority: " + priority);

                    tasksList.add(task);
                } while (cursor.moveToNext());
            } else {
                Toast.makeText(this, "Database schema error", Toast.LENGTH_SHORT).show();
            }
        }

        cursor.close();
        adapter.notifyDataSetChanged();
    }

    private void showTaskOptionsDialog(final int position) {
        final String taskId = tasksList.get(position).get("id");

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Task Options")
                .setItems(new CharSequence[]{"Edit", "Delete"}, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (which == 0) {
                            // Edit option selected
                            showEditTaskDialog(Integer.parseInt(taskId));
                        } else {
                            // Delete option selected
                            deleteTask(Integer.parseInt(taskId));
                        }
                    }
                })
                .setNegativeButton("Cancel", null)
                .show();
    }

    private void showEditTaskDialog(final int taskId) {
        // Get the task details from database
        Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_TASKS + " WHERE " + COLUMN_ID + " = ?",
                new String[]{String.valueOf(taskId)});

        if (cursor.moveToFirst()) {
            int nameIndex = cursor.getColumnIndex(COLUMN_NAME);
            int dateIndex = cursor.getColumnIndex(COLUMN_DATE);
            int priorityIndex = cursor.getColumnIndex(COLUMN_PRIORITY);

            // Check if all column indices are valid
            if (nameIndex >= 0 && dateIndex >= 0 && priorityIndex >= 0) {
                String name = cursor.getString(nameIndex);
                String date = cursor.getString(dateIndex);
                String priority = cursor.getString(priorityIndex);

                // Inflate the edit task dialog layout
                View dialogView = LayoutInflater.from(this).inflate(R.layout.edit_task_dialog, null);
                final EditText editTaskName = dialogView.findViewById(R.id.editTaskNameEditText);
                final DatePicker editDueDate = dialogView.findViewById(R.id.editDueDatePicker);
                final Spinner editPrioritySpinner = dialogView.findViewById(R.id.editPrioritySpinner);

                // Set current values
                editTaskName.setText(name);

                // Parse the date and set date picker
                try {
                    String[] dateParts = date.split("-");
                    int year = Integer.parseInt(dateParts[0]);
                    int month = Integer.parseInt(dateParts[1]) - 1; // DatePicker months are 0-based
                    int day = Integer.parseInt(dateParts[2]);
                    editDueDate.updateDate(year, month, day);
                } catch (Exception e) {
                    // Use current date if parsing fails
                }

                // Set up priority spinner
                ArrayAdapter priorityAdapter = ArrayAdapter.createFromResource(
                        this, R.array.priority_levels, android.R.layout.simple_spinner_item);
                priorityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                editPrioritySpinner.setAdapter(priorityAdapter);

                // Set selected priority
                for (int i = 0; i < editPrioritySpinner.getCount(); i++) {
                    if (editPrioritySpinner.getItemAtPosition(i).toString().equals(priority)) {
                        editPrioritySpinner.setSelection(i);
                        break;
                    }
                }

                // Show dialog
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("Edit Task")
                        .setView(dialogView)
                        .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // Get edited values
                                String updatedName = editTaskName.getText().toString().trim();

                                // Get formatted date
                                int day = editDueDate.getDayOfMonth();
                                int month = editDueDate.getMonth();
                                int year = editDueDate.getYear();

                                Calendar calendar = Calendar.getInstance();
                                calendar.set(year, month, day);

                                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
                                String updatedDate = dateFormat.format(calendar.getTime());

                                String updatedPriority = editPrioritySpinner.getSelectedItem().toString();

                                // Update the task in database
                                updateTask(taskId, updatedName, updatedDate, updatedPriority);
                            }
                        })
                        .setNegativeButton("Cancel", null)
                        .show();
            } else {
                Toast.makeText(this, "Could not load task details", Toast.LENGTH_SHORT).show();
            }
        }

        cursor.close();
    }

    private void updateTask(int taskId, String name, String date, String priority) {
        ContentValues values = new ContentValues();
        values.put(COLUMN_NAME, name);
        values.put(COLUMN_DATE, date);
        values.put(COLUMN_PRIORITY, priority);

        int result = database.update(TABLE_TASKS, values, COLUMN_ID + " = ?",
                new String[]{String.valueOf(taskId)});

        if (result > 0) {
            Toast.makeText(this, "Task updated successfully", Toast.LENGTH_SHORT).show();
            loadTasks();
        } else {
            Toast.makeText(this, "Failed to update task", Toast.LENGTH_SHORT).show();
        }
    }

    private void deleteTask(int taskId) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Confirm Delete")
                .setMessage("Are you sure you want to delete this task?")
                .setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        int result = database.delete(TABLE_TASKS, COLUMN_ID + " = ?",
                                new String[]{String.valueOf(taskId)});

                        if (result > 0) {
                            Toast.makeText(MainActivity.this, "Task deleted successfully", Toast.LENGTH_SHORT).show();
                            loadTasks();
                        } else {
                            Toast.makeText(MainActivity.this, "Failed to delete task", Toast.LENGTH_SHORT).show();
                        }
                    }
                })
                .setNegativeButton("Cancel", null)
                .show();
    }

    @Override
    protected void onDestroy() {
        database.close();
        super.onDestroy();
    }
}

// activity_main.xml




    

    

    

    

    

    

    

    

//edit_task_dialog.xml




    

    

    

    

    

    



//task_item.xml




    

    

    

    


//strings.xml


    Task Manager
    
        High
        Medium
       Low