diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/model/Task.java b/src/Notesmaster/app/src/main/java/net/micode/notes/model/Task.java new file mode 100644 index 0000000..65a4f1c --- /dev/null +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/model/Task.java @@ -0,0 +1,137 @@ +package net.micode.notes.model; + +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; + +public class Task { + private static final String TAG = "Task"; + + public long id; + public String snippet; // Content + public long createdDate; + public long modifiedDate; + public int priority; // 0=Low, 1=Mid, 2=High + public long dueDate; + public int status; // 0=Active, 1=Completed + public long finishedTime; + public long alertDate; + + public static final int PRIORITY_LOW = 0; + public static final int PRIORITY_NORMAL = 1; + public static final int PRIORITY_HIGH = 2; + + public static final int STATUS_ACTIVE = 0; + public static final int STATUS_COMPLETED = 1; + + public Task() { + id = 0; + snippet = ""; + createdDate = System.currentTimeMillis(); + modifiedDate = System.currentTimeMillis(); + priority = PRIORITY_LOW; + dueDate = 0; + status = STATUS_ACTIVE; + finishedTime = 0; + alertDate = 0; + } + + public static Task fromCursor(Cursor cursor) { + Task task = new Task(); + + // Use getColumnIndex instead of getColumnIndexOrThrow for safety + int idxId = cursor.getColumnIndex(NoteColumns.ID); + if (idxId != -1) task.id = cursor.getLong(idxId); + + int idxSnippet = cursor.getColumnIndex(NoteColumns.SNIPPET); + if (idxSnippet != -1) task.snippet = cursor.getString(idxSnippet); + + int idxCreated = cursor.getColumnIndex(NoteColumns.CREATED_DATE); + if (idxCreated != -1) task.createdDate = cursor.getLong(idxCreated); + + int idxModified = cursor.getColumnIndex(NoteColumns.MODIFIED_DATE); + if (idxModified != -1) task.modifiedDate = cursor.getLong(idxModified); + + int idxAlert = cursor.getColumnIndex(NoteColumns.ALERTED_DATE); + if (idxAlert != -1) task.alertDate = cursor.getLong(idxAlert); + + int idxPriority = cursor.getColumnIndex(NoteColumns.GTASK_PRIORITY); + if (idxPriority != -1) task.priority = cursor.getInt(idxPriority); + + int idxDueDate = cursor.getColumnIndex(NoteColumns.GTASK_DUE_DATE); + if (idxDueDate != -1) task.dueDate = cursor.getLong(idxDueDate); + + int idxStatus = cursor.getColumnIndex(NoteColumns.GTASK_STATUS); + if (idxStatus != -1) task.status = cursor.getInt(idxStatus); + + int idxFinished = cursor.getColumnIndex(NoteColumns.GTASK_FINISHED_TIME); + if (idxFinished != -1) task.finishedTime = cursor.getLong(idxFinished); + + return task; + } + + public Uri save(Context context) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.TYPE, Notes.TYPE_TASK); + values.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + values.put(NoteColumns.ALERTED_DATE, alertDate); + values.put(NoteColumns.GTASK_PRIORITY, priority); + values.put(NoteColumns.GTASK_DUE_DATE, dueDate); + values.put(NoteColumns.GTASK_STATUS, status); + values.put(NoteColumns.GTASK_FINISHED_TIME, finishedTime); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + + // Ensure snippet is updated in note table too, though trigger might handle it, + // explicit update is safer if trigger fails or data table logic changes. + values.put(NoteColumns.SNIPPET, snippet); + + if (id == 0) { + values.put(NoteColumns.CREATED_DATE, System.currentTimeMillis()); + values.put(NoteColumns.PARENT_ID, Notes.ID_ROOT_FOLDER); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values); + if (uri != null) { + id = ContentUris.parseId(uri); + updateData(context); + } + return uri; + } else { + context.getContentResolver().update( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), + values, null, null + ); + updateData(context); + return ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id); + } + } + + private void updateData(Context context) { + ContentValues values = new ContentValues(); + values.put(DataColumns.NOTE_ID, id); + values.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE); + values.put(DataColumns.CONTENT, snippet); + values.put(DataColumns.MODIFIED_DATE, System.currentTimeMillis()); + + Cursor c = context.getContentResolver().query(Notes.CONTENT_DATA_URI, new String[]{DataColumns.ID}, + DataColumns.NOTE_ID + "=?", new String[]{String.valueOf(id)}, null); + + if (c != null) { + if (c.moveToFirst()) { + long dataId = c.getLong(0); + context.getContentResolver().update(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), values, null, null); + } else { + context.getContentResolver().insert(Notes.CONTENT_DATA_URI, values); + } + c.close(); + } else { + context.getContentResolver().insert(Notes.CONTENT_DATA_URI, values); + } + } +} diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskEditActivity.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskEditActivity.java new file mode 100644 index 0000000..8960a57 --- /dev/null +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskEditActivity.java @@ -0,0 +1,205 @@ +package net.micode.notes.ui; + +import android.app.AlertDialog; +import android.app.DatePickerDialog; +import android.app.TimePickerDialog; +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RadioGroup; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.model.Task; + +import java.util.Calendar; + +public class TaskEditActivity extends AppCompatActivity { + + private EditText contentEdit; + private ImageView alarmBtn; + private ImageView tagBtn; + private Button doneBtn; + + private Task task; + private long taskId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_task_edit); + + contentEdit = findViewById(R.id.task_edit_content); + alarmBtn = findViewById(R.id.btn_alarm); + tagBtn = findViewById(R.id.btn_tag); + doneBtn = findViewById(R.id.btn_done); + + Intent intent = getIntent(); + taskId = intent.getLongExtra(Intent.EXTRA_UID, 0); + + if (taskId > 0) { + loadTask(); + } else { + task = new Task(); + } + + setupListeners(); + } + + private void loadTask() { + new Thread(() -> { + Cursor cursor = getContentResolver().query( + Notes.CONTENT_NOTE_URI, + null, + NoteColumns.ID + "=?", + new String[]{String.valueOf(taskId)}, + null + ); + + if (cursor != null) { + if (cursor.moveToFirst()) { + task = Task.fromCursor(cursor); + runOnUiThread(() -> { + contentEdit.setText(task.snippet); + contentEdit.setSelection(task.snippet.length()); + }); + } else { + task = new Task(); + } + cursor.close(); + } else { + task = new Task(); + } + }).start(); + } + + private void setupListeners() { + doneBtn.setOnClickListener(v -> { + saveTask(); + setResult(RESULT_OK); + finish(); + }); + + alarmBtn.setOnClickListener(v -> { + showAlarmDialog(); + }); + + tagBtn.setOnClickListener(v -> { + showTagDialog(); + }); + } + + @Override + public void onBackPressed() { + if (saveTask()) { + setResult(RESULT_OK); + } + super.onBackPressed(); + } + + private boolean saveTask() { + String content = contentEdit.getText().toString(); + if (content.trim().length() == 0) { + if (task.id == 0) { + return false; + } + } + + task.snippet = content; + task.save(this); + + // Register Alarm if needed. + if (task.alertDate > 0 && task.alertDate > System.currentTimeMillis()) { + Intent intent = new Intent(this, AlarmReceiver.class); + intent.setData(android.content.ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, task.id)); + android.app.PendingIntent pendingIntent = android.app.PendingIntent.getBroadcast(this, 0, intent, android.app.PendingIntent.FLAG_UPDATE_CURRENT | android.app.PendingIntent.FLAG_IMMUTABLE); + android.app.AlarmManager alarmManager = (android.app.AlarmManager) getSystemService(ALARM_SERVICE); + alarmManager.set(android.app.AlarmManager.RTC_WAKEUP, task.alertDate, pendingIntent); + } + return true; + } + + private void showAlarmDialog() { + final Calendar c = Calendar.getInstance(); + if (task.alertDate > 0) { + c.setTimeInMillis(task.alertDate); + } + + new DatePickerDialog(this, (view, year, month, dayOfMonth) -> { + c.set(Calendar.YEAR, year); + c.set(Calendar.MONTH, month); + c.set(Calendar.DAY_OF_MONTH, dayOfMonth); + + new TimePickerDialog(this, (view1, hourOfDay, minute) -> { + c.set(Calendar.HOUR_OF_DAY, hourOfDay); + c.set(Calendar.MINUTE, minute); + c.set(Calendar.SECOND, 0); + + task.alertDate = c.getTimeInMillis(); + Toast.makeText(this, "Alarm set", Toast.LENGTH_SHORT).show(); + + }, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true).show(); + + }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show(); + } + + private void showTagDialog() { + View view = LayoutInflater.from(this).inflate(R.layout.dialog_task_tag, null); + + RadioGroup priorityGroup = view.findViewById(R.id.priority_group); + TextView dateText = view.findViewById(R.id.date_text); + Button dateBtn = view.findViewById(R.id.btn_set_date); + + if (task.priority == Task.PRIORITY_HIGH) priorityGroup.check(R.id.priority_high); + else if (task.priority == Task.PRIORITY_NORMAL) priorityGroup.check(R.id.priority_mid); + else priorityGroup.check(R.id.priority_low); + + final Calendar c = Calendar.getInstance(); + if (task.dueDate > 0) { + c.setTimeInMillis(task.dueDate); + dateText.setText(android.text.format.DateFormat.format("yyyy-MM-dd HH:mm", c)); + } else { + dateText.setText("No Due Date"); + } + + dateBtn.setOnClickListener(v -> { + new DatePickerDialog(this, (dView, year, month, dayOfMonth) -> { + c.set(Calendar.YEAR, year); + c.set(Calendar.MONTH, month); + c.set(Calendar.DAY_OF_MONTH, dayOfMonth); + + new TimePickerDialog(this, (tView, hourOfDay, minute) -> { + c.set(Calendar.HOUR_OF_DAY, hourOfDay); + c.set(Calendar.MINUTE, minute); + + task.dueDate = c.getTimeInMillis(); + dateText.setText(android.text.format.DateFormat.format("yyyy-MM-dd HH:mm", c)); + + }, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true).show(); + + }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show(); + }); + + new AlertDialog.Builder(this) + .setTitle("Set Tag") + .setView(view) + .setPositiveButton("OK", (dialog, which) -> { + int id = priorityGroup.getCheckedRadioButtonId(); + if (id == R.id.priority_high) task.priority = Task.PRIORITY_HIGH; + else if (id == R.id.priority_mid) task.priority = Task.PRIORITY_NORMAL; + else task.priority = Task.PRIORITY_LOW; + }) + .setNegativeButton("Cancel", null) + .show(); + } +} diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskListActivity.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskListActivity.java new file mode 100644 index 0000000..b97cf59 --- /dev/null +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskListActivity.java @@ -0,0 +1,156 @@ +package net.micode.notes.ui; + +import android.app.Activity; +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.view.MenuItem; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.model.Task; + +import java.util.ArrayList; +import java.util.List; + +public class TaskListActivity extends AppCompatActivity implements TaskListAdapter.OnTaskItemClickListener { + + private RecyclerView recyclerView; + private TaskListAdapter adapter; + private FloatingActionButton fab; + private static final int REQUEST_EDIT_TASK = 1001; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_task_list); + + // Initialize Toolbar + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + // Remove default title + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayShowTitleEnabled(false); + getSupportActionBar().setDisplayHomeAsUpEnabled(false); + } + + // Setup custom "Notes" navigation + View notesTitle = findViewById(R.id.tv_toolbar_title_notes); + if (notesTitle != null) { + notesTitle.setOnClickListener(v -> { + finish(); + overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); + }); + } + + // Setup Navigation Icon (Back Button) - REMOVED as per new requirement + // toolbar.setNavigationOnClickListener(v -> { + // finish(); + // overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); + // }); + + recyclerView = findViewById(R.id.task_list_view); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + adapter = new TaskListAdapter(this, this); + recyclerView.setAdapter(adapter); + + fab = findViewById(R.id.btn_new_task); + fab.setOnClickListener(v -> { + Intent intent = new Intent(TaskListActivity.this, TaskEditActivity.class); + startActivityForResult(intent, REQUEST_EDIT_TASK); + }); + } + + @Override + protected void onResume() { + super.onResume(); + loadTasks(); + } + + private void loadTasks() { + new Thread(() -> { + Cursor cursor = getContentResolver().query( + Notes.CONTENT_NOTE_URI, + null, + NoteColumns.TYPE + "=?", + new String[]{String.valueOf(Notes.TYPE_TASK)}, + null + ); + + List tasks = new ArrayList<>(); + if (cursor != null) { + while (cursor.moveToNext()) { + tasks.add(Task.fromCursor(cursor)); + } + cursor.close(); + } + + android.util.Log.d("TaskListActivity", "Loaded tasks count: " + tasks.size()); + + runOnUiThread(() -> adapter.setTasks(tasks)); + }).start(); + } + + @Override + public void onItemClick(Task task) { + Intent intent = new Intent(this, TaskEditActivity.class); + intent.putExtra(Intent.EXTRA_UID, task.id); + startActivityForResult(intent, REQUEST_EDIT_TASK); + } + + @Override + public void onCheckBoxClick(Task task) { + task.status = (task.status == Task.STATUS_ACTIVE) ? Task.STATUS_COMPLETED : Task.STATUS_ACTIVE; + if (task.status == Task.STATUS_COMPLETED) { + task.finishedTime = System.currentTimeMillis(); + } else { + task.finishedTime = 0; + } + + new Thread(() -> { + task.save(this); + runOnUiThread(() -> loadTasks()); // Reload to sort + }).start(); + } + + @Override + public boolean onCreateOptionsMenu(android.view.Menu menu) { + // Removed menu_notes as per requirement, keeping empty or future menus + // getMenuInflater().inflate(R.menu.task_list, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + finish(); + overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_EDIT_TASK && resultCode == RESULT_OK) { + loadTasks(); + } + } +} \ No newline at end of file diff --git a/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskListAdapter.java b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskListAdapter.java new file mode 100644 index 0000000..c12800e --- /dev/null +++ b/src/Notesmaster/app/src/main/java/net/micode/notes/ui/TaskListAdapter.java @@ -0,0 +1,168 @@ +package net.micode.notes.ui; + +import android.content.Context; +import android.graphics.Paint; +import android.text.format.DateFormat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import net.micode.notes.R; +import net.micode.notes.model.Task; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +public class TaskListAdapter extends RecyclerView.Adapter { + + private List tasks = new ArrayList<>(); + private Context context; + private OnTaskItemClickListener listener; + + public interface OnTaskItemClickListener { + void onItemClick(Task task); + void onCheckBoxClick(Task task); + } + + public TaskListAdapter(Context context, OnTaskItemClickListener listener) { + this.context = context; + this.listener = listener; + } + + public void setTasks(List newTasks) { + this.tasks = new ArrayList<>(newTasks); + sortTasks(); + notifyDataSetChanged(); + } + + private void sortTasks() { + Collections.sort(tasks, new Comparator() { + @Override + public int compare(Task t1, Task t2) { + // 1. Status: Active (0) < Completed (1) + if (t1.status != t2.status) { + return Integer.compare(t1.status, t2.status); + } + + // 2. If both Active + if (t1.status == Task.STATUS_ACTIVE) { + // Priority: High (2) > Mid (1) > Low (0) -> DESC + if (t1.priority != t2.priority) { + return Integer.compare(t2.priority, t1.priority); + } + + if (t1.dueDate != t2.dueDate) { + if (t1.dueDate == 0) return 1; // t1 no date -> bottom + if (t2.dueDate == 0) return -1; // t2 no date -> bottom + return Long.compare(t1.dueDate, t2.dueDate); // Early date first + } + + // Creation Date (Fallback) + return Long.compare(t2.createdDate, t1.createdDate); + } + + // 3. If both Completed + // DESC sort by finishedTime. + return Long.compare(t2.finishedTime, t1.finishedTime); + } + }); + } + + @NonNull + @Override + public TaskViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.task_list_item, parent, false); + return new TaskViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull TaskViewHolder holder, int position) { + Task task = tasks.get(position); + holder.bind(task); + } + + @Override + public int getItemCount() { + return tasks.size(); + } + + class TaskViewHolder extends RecyclerView.ViewHolder { + CheckBox checkBox; + TextView content; + TextView priority; + TextView date; + ImageView alarm; + + public TaskViewHolder(@NonNull View itemView) { + super(itemView); + checkBox = itemView.findViewById(R.id.task_checkbox); + content = itemView.findViewById(R.id.task_content); + priority = itemView.findViewById(R.id.task_priority); + date = itemView.findViewById(R.id.task_date); + alarm = itemView.findViewById(R.id.task_alarm_icon); + + itemView.setOnClickListener(v -> { + if (getAdapterPosition() != RecyclerView.NO_POSITION) { + listener.onItemClick(tasks.get(getAdapterPosition())); + } + }); + + checkBox.setOnClickListener(v -> { + if (getAdapterPosition() != RecyclerView.NO_POSITION) { + listener.onCheckBoxClick(tasks.get(getAdapterPosition())); + } + }); + } + + public void bind(Task task) { + content.setText(task.snippet); + checkBox.setChecked(task.status == Task.STATUS_COMPLETED); + + if (task.status == Task.STATUS_COMPLETED) { + content.setPaintFlags(content.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + content.setAlpha(0.5f); + } else { + content.setPaintFlags(content.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); + content.setAlpha(1.0f); + } + + // Priority + if (task.priority == Task.PRIORITY_HIGH) { + priority.setVisibility(View.VISIBLE); + priority.setText("HIGH"); + priority.setBackgroundColor(0xFFFFCDD2); // Light Red + priority.setTextColor(0xFFB71C1C); // Dark Red + } else if (task.priority == Task.PRIORITY_NORMAL) { + priority.setVisibility(View.VISIBLE); + priority.setText("MED"); + priority.setBackgroundColor(0xFFFFF9C4); // Light Yellow + priority.setTextColor(0xFFF57F17); // Dark Yellow + } else { + priority.setVisibility(View.GONE); + } + + // Due Date + if (task.dueDate > 0) { + date.setVisibility(View.VISIBLE); + date.setText(DateFormat.format("MM/dd HH:mm", task.dueDate)); + } else { + date.setVisibility(View.GONE); + } + + // Alarm + if (task.alertDate > 0) { + alarm.setVisibility(View.VISIBLE); + } else { + alarm.setVisibility(View.GONE); + } + } + } +} diff --git a/src/Notesmaster/app/src/main/res/anim/slide_in_left.xml b/src/Notesmaster/app/src/main/res/anim/slide_in_left.xml new file mode 100644 index 0000000..8644994 --- /dev/null +++ b/src/Notesmaster/app/src/main/res/anim/slide_in_left.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/Notesmaster/app/src/main/res/anim/slide_in_right.xml b/src/Notesmaster/app/src/main/res/anim/slide_in_right.xml new file mode 100644 index 0000000..131d2ea --- /dev/null +++ b/src/Notesmaster/app/src/main/res/anim/slide_in_right.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/Notesmaster/app/src/main/res/anim/slide_out_left.xml b/src/Notesmaster/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 0000000..dd8d4cd --- /dev/null +++ b/src/Notesmaster/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/Notesmaster/app/src/main/res/anim/slide_out_right.xml b/src/Notesmaster/app/src/main/res/anim/slide_out_right.xml new file mode 100644 index 0000000..12bc72e --- /dev/null +++ b/src/Notesmaster/app/src/main/res/anim/slide_out_right.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/Notesmaster/app/src/main/res/drawable/ic_menu_notes.xml b/src/Notesmaster/app/src/main/res/drawable/ic_menu_notes.xml new file mode 100644 index 0000000..da317da --- /dev/null +++ b/src/Notesmaster/app/src/main/res/drawable/ic_menu_notes.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/src/Notesmaster/app/src/main/res/drawable/ic_menu_tasks.xml b/src/Notesmaster/app/src/main/res/drawable/ic_menu_tasks.xml new file mode 100644 index 0000000..17cdaa9 --- /dev/null +++ b/src/Notesmaster/app/src/main/res/drawable/ic_menu_tasks.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/src/Notesmaster/app/src/main/res/layout/activity_task_edit.xml b/src/Notesmaster/app/src/main/res/layout/activity_task_edit.xml new file mode 100644 index 0000000..be4dd23 --- /dev/null +++ b/src/Notesmaster/app/src/main/res/layout/activity_task_edit.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + +