0% found this document useful (0 votes)
14 views8 pages

Mad Final Code

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views8 pages

Mad Final Code

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

MainActivity.

java

package com.example.g2;

import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.io.FileOutputStream;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

private EditText taskName, taskDescription, taskDate, taskTime;


private Button selectDateButton, selectTimeButton;

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

taskName = findViewById(R.id.taskName);
taskDescription = findViewById(R.id.taskDescription);
taskDate = findViewById(R.id.taskDate);
taskTime = findViewById(R.id.taskTime);
selectDateButton = findViewById(R.id.selectDateButton);
selectTimeButton = findViewById(R.id.selectTimeButton);
}

public void showDatePickerDialog(View view) {


Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

DatePickerDialog datePickerDialog = new DatePickerDialog(this,


(view1, selectedYear, selectedMonth, selectedDay) -> {
// Format the selected date
String date = selectedDay + "/" + (selectedMonth + 1) + "/" + selectedYear;
taskDate.setText(date); // Set the date in the EditText
}, year, month, day);
datePickerDialog.show();
}

public void showTimePickerDialog(View view) {


Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);

TimePickerDialog timePickerDialog = new TimePickerDialog(this,


(view1, selectedHour, selectedMinute) -> {
// Format the selected time
String time = String.format("%02d:%02d", selectedHour, selectedMinute);
taskTime.setText(time); // Set the time in the EditText
}, hour, minute, true);
timePickerDialog.show();
}

public void addTask(View view) {


String name = taskName.getText().toString();
String description = taskDescription.getText().toString();
String date = taskDate.getText().toString();
String time = taskTime.getText().toString();

if (name.isEmpty() || date.isEmpty() || time.isEmpty()) {


Toast.makeText(this, "Please fill all fields", Toast.LENGTH_SHORT).show();
return;
}

String task = name + ";" + description + ";" + date + ";" + time + ";incomplete\n";

try {
FileOutputStream fos = openFileOutput("tasks.txt", MODE_APPEND);
fos.write(task.getBytes());
fos.close();
Toast.makeText(this, "Task Added", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}

scheduleNotification(name, date, time);


}
private void scheduleNotification(String taskName, String date, String time) {
String[] dateParts = date.split("/");
String[] timeParts = time.split(":");

int day = Integer.parseInt(dateParts[0]);


int month = Integer.parseInt(dateParts[1]) - 1; // Month is 0-based
int year = Integer.parseInt(dateParts[2]);
int hour = Integer.parseInt(timeParts[0]);
int minute = Integer.parseInt(timeParts[1]);

// Create a Calendar instance with the selected date and time


Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);

// Subtract 15 minutes from the scheduled time


calendar.add(Calendar.MINUTE, -5);

// Create the notification intent


Intent intent = new Intent(this, NotificationReceiver.class);
intent.putExtra("taskName", taskName);

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent,


PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

// Set the alarm for 15 minutes before the task time


alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Toast.makeText(this, "Notification Scheduled 5 minutes before task", Toast.LENGTH_SHORT).show();


}

public void viewTasks(View view) {


Intent intent = new Intent(this, ViewTasksActivity.class);
startActivity(intent);
}
}

NotificationReceiver.java

package com.example.g2;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import androidx.core.app.NotificationCompat;

public class NotificationReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String taskName = intent.getStringExtra("taskName");

NotificationManager notificationManager = (NotificationManager)


context.getSystemService(Context.NOTIFICATION_SERVICE);
String channelId = "task_notification_channel";

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {


NotificationChannel channel = new NotificationChannel(channelId, "Task Notifications",
NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(channel);
}
Notification notification = new NotificationCompat.Builder(context, channelId)
.setContentTitle("Task Reminder")
.setContentText(taskName)
.setSmallIcon(android.R.drawable.ic_dialog_info)
.build();

notificationManager.notify(1, notification);
}
}

ViewTasksActivity.java

package com.example.g2;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class ViewTasksActivity extends AppCompatActivity {

private ListView listView;


private ArrayList<String> tasks;
private ArrayAdapter<String> adapter;

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

listView = findViewById(R.id.listView);
tasks = new ArrayList<>();

loadTasks();

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
markTaskAsCompleted(position);
}
});

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
deleteTask(position);
return true;
}
});
}

private void loadTasks() {


try {
FileInputStream fis = openFileInput("tasks.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line;

while ((line = reader.readLine()) != null) {


tasks.add(line);
}

reader.close();
fis.close();

adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, tasks);


listView.setAdapter(adapter);
} catch (Exception e) {
e.printStackTrace();
}
}

private void markTaskAsCompleted(int position) {


String task = tasks.get(position);
if (task.contains("incomplete")) {
task = task.replace("incomplete", "completed");
tasks.set(position, task);
saveTasks();
Toast.makeText(this, "Task marked as completed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Task is already completed", Toast.LENGTH_SHORT).show();
}
adapter.notifyDataSetChanged();
}

private void deleteTask(int position) {


tasks.remove(position);
saveTasks();
adapter.notifyDataSetChanged();
Toast.makeText(this, "Task deleted", Toast.LENGTH_SHORT).show();
}

private void saveTasks() {


try {
FileOutputStream fos = openFileOutput("tasks.txt", MODE_PRIVATE);
for (String task : tasks) {
fos.write((task + "\n").getBytes());
}
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public void goBack(View view) {


finish();
}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<EditText
android:id="@+id/taskName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Task Name" />

<EditText
android:id="@+id/taskDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Task Description" />

<Button
android:id="@+id/selectDateButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select Date"
android:onClick="showDatePickerDialog" />

<Button
android:id="@+id/selectTimeButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select Time"
android:onClick="showTimePickerDialog" />

<EditText
android:id="@+id/taskDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Selected Date"
android:focusable="false"
android:clickable="true"/>

<EditText
android:id="@+id/taskTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Selected Time"
android:focusable="false"
android:clickable="true"/>

<Button
android:id="@+id/addTaskButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Task"
android:onClick="addTask"/>

<Button
android:id="@+id/viewTasksButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View Tasks"
android:onClick="viewTasks"/>
</LinearLayout>

Activity_view_tasks.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tap a task to mark it as completed.\nLong press a task to delete it."
android:padding="16dp"
android:textSize="16sp"
android:textColor="@android:color/black"
android:gravity="center" />

<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@android:color/darker_gray"
android:dividerHeight="1dp" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Back"
android:onClick="goBack"
android:layout_gravity="center_horizontal"
android:padding="10dp" />
</LinearLayout>
Androidmanifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.g2">

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />


<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.G2">

<!-- Main Activity -->


<activity android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!-- View Tasks Activity -->


<activity android:name=".ViewTasksActivity" />

<!-- Receiver for Task Notifications -->


<receiver android:name=".NotificationReceiver" />

</application>
</manifest>

You might also like