Description
see
Project
Deadline: Tuesday 30/11/2025 @ 23:59
[Total Mark is 14]
Student Details:
CRN:
Name:
Name:
Name:
ID:
ID:
ID:
Instructions:
• You must submit two separate copies (one Word file and one PDF file) using the Assignment Template on
Blackboard via the allocated folder. These files must not be in compressed format.
• It is your responsibility to check and make sure that you have uploaded both the correct files.
• Zero mark will be given if you try to bypass the SafeAssign (e.g., misspell words, remove spaces between
words, hide characters, use different character sets, convert text into image or languages other than English
or any kind of manipulation).
• Email submission will not be accepted.
• You are advised to make your work clear and well-presented. This includes filling your information on the cover
page.
• You must use this template, failing which will result in zero mark.
• You MUST show all your work, and text must not be converted into an image, unless specified otherwise by
the question.
• Late submission will result in ZERO mark.
• The work should be your own, copying from students or other resources will result in ZERO mark.
• Use Times New Roman font for all your answers.
• Maximum group number is 4 Students.
Restricted – مقيد
Project Instructions
•
The work on this project must be performed by a group (minimum of 3 and a maximum of 4
students).
•
Each group leader must send an email with the team member’s details.
•
Note each group needs to be approved by your instructor.
•
The work should be your own; copying from students or other resources will result in ZERO
marks.
•
This project is worth 14 marks and will be distributed as the following:
1. Part 1 – Implementation Part (9.5 points).
2. Part 2 – Presentation part (4.5 points).
Overview:
This project focuses on developing a mobile application using the Android platform. Each
student will select a topic of their choice (such as education, health, e-commerce,
entertainment, productivity, or social media) and design an app that provides a practical
solution to a real-world need. The project will highlight the student’s ability to plan, design,
implement, and test a mobile application while applying key Android development skills. It
should also include basic data persistence and a user-friendly interface.
Marking Criteria
Report Completeness
/1
The app must contain at least 3 runnable and navigable activities
/2
The app must have an appealing Interface
/0. 5
The app must have a connection to a database
/3
The app must contain at least 5 toast messages, buttons, Table Layout,
Constraint Layout, ScrollView, CardView, Arraylist, Dialog window,
RecyclerView, and RecyclerAdapter.
/3
Project presentation, demonstration, and discussion
(At the end of the semester)
Final Grade
/4.5
/14
Each student/group has to prepare
1. IT487_Project.docx:
a. The student must use the same file (IT487_Project.docx) to prepare group answers.
b. For each part of the project, the student must copy and paste their code and add a screenshot of
the output with a brief explication of each web application functionality.
c. Prepare a PDF version of this file.
2. Project.zip: contains all the project files.
The student will upload:
1. IT487_Project.docx
2. IT487_Project.pdf
3. Project.zip
MyStudyHelper
I. Project Description:
MyStudyHelper is a lightweight and intuitive Android application designed to assist students in organizing their study
materials, managing reminders, and accessing educational resources conveniently from a single platform. The application
focuses on improving study productivity and maintaining a structured learning approach for students of various
educational levels.
The app comprises the following core features:
1. Study Notes Management
o
Users can browse curated study notes on topics like programming languages (Java), Android
development, and data structures.
o
Each note contains a title, a short description, and detailed content.
o
Users can click on a note to view its full content in a dedicated detail screen (NoteDetailActivity).
o
Notes are presented in a clean, scrollable, and user-friendly RecyclerView with card-based layouts for
easy navigation.
2. Reminders
o
Users can add custom study reminders using an input field.
o
Reminders are displayed in a ListView and stored persistently using SharedPreferences, ensuring that
reminders remain available even after closing the app.
o
Users can delete reminders individually or remove the last added reminder.
o
This functionality helps students keep track of deadlines, study schedules, and important tasks.
3. Resources
o
The ResourcesActivity provides a placeholder interface for adding links to external study materials,
online courses, textbooks, or useful websites.
o
This feature is designed to centralize educational resources, making it easier for students to access
relevant study content.
4. About Section
o
The AboutActivity displays information about the app, including its name, version, developer details,
and contact email.
o
A simple back button enables users to return to the main dashboard easily.
5. User-Friendly Design
o
The app follows Material Design guidelines for consistent UI/UX across activities.
o
Themes, color palettes, and typography are chosen to provide a visually appealing and accessible
experience.
o
The splash screen and adaptive icons enhance the professional look and feel of the app.
6. Technical Implementation
o
Built using Java and Android SDK with a minimum SDK of 24.
o
Utilizes RecyclerView for dynamic note listings, SharedPreferences for persistent storage, and standard
Android UI components for efficient navigation.
o
The app architecture is modular, separating concerns between Activities, Adapters, and model classes
(Note).
o
View binding and structured XML layouts ensure maintainable and readable code.
7. Future Enhancements
o
Integration of cloud backup for notes and reminders.
o
Addition of user authentication for personalized experiences.
o
Expansion of study resources with external APIs for online courses and ebooks.
o
Interactive notifications for reminders and study schedules.
Conclusion:
MyStudyHelper is designed as a comprehensive study companion that merges simplicity with functionality. Its modular
design, persistent storage, and clean user interface make it suitable for students who want to organize their study
materials, manage reminders, and access resources efficiently. The app serves as a foundation for a scalable educational
tool with potential future integrations.
II. Application Interface:
III. Implementation Code
package com.mystudyhelper;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
Button backButton = findViewById(R.id.about_back_button);
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); // Closes the current activity and returns to the previous one (MainActivity)
}
});
}
}
MainActivity.java
package com.mystudyhelper;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnNotes = findViewById(R.id.btn_study_notes);
Button btnReminders = findViewById(R.id.btn_reminders);
Button btnResources = findViewById(R.id.btn_resources);
Button btnAbout = findViewById(R.id.btn_about_app);
btnNotes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, “Opening Study Notes”, Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, NotesActivity.class));
}
});
btnReminders.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, “Opening Reminders”, Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, ReminderActivity.class));
}
});
btnResources.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, “Opening Resources”, Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, ResourcesActivity.class));
}
});
btnAbout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, “Opening About App”, Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, AboutActivity.class));
}
});
}
}
NoteDetailActivity.java
package com.mystudyhelper;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class NoteDetailActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_note_detail);
TextView titleTextView = findViewById(R.id.note_detail_title);
TextView contentTextView = findViewById(R.id.note_detail_content);
String title = getIntent().getStringExtra(“NOTE_TITLE”);
String content = getIntent().getStringExtra(“NOTE_CONTENT”);
titleTextView.setText(title);
contentTextView.setText(content);
}
}
NotesActivity.java
package com.mystudyhelper;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class NotesActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private NoteAdapter adapter;
private List noteList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notes);
// Sample Data
noteList = new ArrayList();
noteList.add(new Note(“Java Basics”, “Introduction to Java programming language and its core concepts.”,
“Java is a high-level, class-based, object-oriented programming language that is designed to have as few
implementation dependencies as possible. It is a general-purpose programming language intended to let
application developers write once, run anywhere (WORA), meaning that compiled Java code can run on all
platforms that support Java without the need for recompilation.”));
noteList.add(new Note(“Android Layouts”, “Understanding ConstraintLayout and LinearLayout for UI
design.”, “Android layouts define the visual structure for a user interface, such as the UI for an activity or app
widget. You can declare a layout in two ways: Declare UI elements in XML or instantiate layout elements at
runtime. ConstraintLayout is a flexible layout manager that allows you to position and size widgets in a flexible
way. LinearLayout arranges elements in a single row or column.”));
noteList.add(new Note(“Data Structures”, “Review of common data structures like Arrays, Lists, and Maps.”,
“A data structure is a particular way of organizing data in a computer so that it can be used effectively. Different
kinds of data structures are suited to different kinds of applications, and some are highly specialized to specific
tasks. For example, B-trees are particularly well-suited for implementation of databases.”));
recyclerView = findViewById(R.id.notes_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new NoteAdapter(noteList);
recyclerView.setAdapter(adapter);
}
// Note Model Class
public static class Note {
String title;
String shortDescription;
String fullContent;
public Note(String title, String shortDescription, String fullContent) {
this.title = title;
this.shortDescription = shortDescription;
this.fullContent = fullContent;
}
}
// RecyclerView Adapter
private class NoteAdapter extends RecyclerView.Adapter {
private List notes;
public NoteAdapter(List notes) {
this.notes = notes;
}
@NonNull
@Override
public NoteViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_note, parent, false);
return new NoteViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull NoteViewHolder holder, int position) {
final Note note = notes.get(position);
holder.title.setText(note.title);
holder.shortDescription.setText(note.shortDescription);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(NotesActivity.this, NoteDetailActivity.class);
intent.putExtra(“NOTE_TITLE”, note.title);
intent.putExtra(“NOTE_CONTENT”, note.fullContent);
startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return notes.size();
}
class NoteViewHolder extends RecyclerView.ViewHolder {
TextView title;
TextView shortDescription;
public NoteViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.note_title);
shortDescription = itemView.findViewById(R.id.note_short_description);
}
}
}
}
ReminderActivity.java
package com.mystudyhelper;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ReminderActivity extends AppCompatActivity {
private static final String PREFS_NAME = “MyStudyHelperPrefs”;
private static final String REMINDERS_KEY = “RemindersList”;
private EditText reminderInput;
private ListView remindersListView;
private ArrayAdapter adapter;
private List remindersList;
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reminder);
reminderInput = findViewById(R.id.reminder_input);
remindersListView = findViewById(R.id.reminders_list_view);
Button addButton = findViewById(R.id.add_reminder_button);
Button deleteButton = findViewById(R.id.delete_reminder_button);
sharedPreferences = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
loadReminders();
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, remindersList);
remindersListView.setAdapter(adapter);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addReminder();
}
});
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteReminder();
}
});
}
private void loadReminders() {
Set savedSet = sharedPreferences.getStringSet(REMINDERS_KEY, new HashSet());
remindersList = new ArrayList(savedSet);
}
private void saveReminders() {
SharedPreferences.Editor editor = sharedPreferences.edit();
Set set = new HashSet(remindersList);
editor.putStringSet(REMINDERS_KEY, set);
editor.apply();
}
private void addReminder() {
String reminderText = reminderInput.getText().toString().trim();
if (!reminderText.isEmpty()) {
remindersList.add(reminderText);
adapter.notifyDataSetChanged();
saveReminders();
reminderInput.setText(“”);
Toast.makeText(this, “Reminder added: ” + reminderText, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, “Please enter a reminder.”, Toast.LENGTH_SHORT).show();
}
}
private void deleteReminder() {
if (remindersList.isEmpty()) {
Toast.makeText(this, “No reminders to delete.”, Toast.LENGTH_SHORT).show();
return;
}
// Simple implementation: delete the last added reminder
String deletedReminder = remindersList.remove(remindersList.size() – 1);
adapter.notifyDataSetChanged();
saveReminders();
Toast.makeText(this, “Reminder deleted: ” + deletedReminder, Toast.LENGTH_SHORT).show();
}
}
ResourcesActivity.java
package com.mystudyhelper;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class ResourcesActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_resources);
TextView textView = findViewById(R.id.resources_text_view);
textView.setText(“This screen is for future expansion to include study resources like links to online courses,
textbooks, or useful websites.”);
}
}
spash.xml
activity_about.xml
activity_main.xml
activity_note_detiles.xml
activity_notes.xml
activity_reminder.xml
activity_resources.xml
item_note.xml
ic_launcher_round.xml
ic_launcher.xml
colors.xml
#FFBB86FC
#FF6200EE
#FF3700B3
#FF03DAC5
#FF018786
#FF000000
#FFFFFFFF
#3F51B5
#303F9F
#FF4081
#F5F5F5
#212121
#757575
string.xml
MyStudyHelper
themes.xml
@color/colorPrimary
@color/colorPrimaryDark
@color/white
@color/colorAccent
@color/teal_700
@color/black
?attr/colorPrimaryVariant
@color/colorBackground
@color/colorAccent
false
true
@color/colorPrimary
@mipmap/ic_launcher
@style/Theme.MyStudyHelper
themes.xml
@color/purple_200
@color/purple_700
@color/black
@color/teal_200
@color/teal_200
@color/black
?attr/colorPrimaryVariant
@color/black
@color/teal_200
@color/black
@mipmap/ic_launcher
@style/Theme.MyStudyHelper
backup_rules.xml
data_extraction_rules.xml
AndroidManifest.xml
build.gradle
plugins {
id ‘com.android.application’
}
android {
namespace ‘com.mystudyhelper’
compileSdk 34
defaultConfig {
applicationId “com.mystudyhelper”
minSdk 24
targetSdk 34
versionCode 1
versionName “1.0”
testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner”
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding true
}
}
dependencies {
implementation ‘androidx.appcompat:appcompat:1.6.1’
implementation ‘com.google.android.material:material:1.10.0’
implementation ‘androidx.constraintlayout:constraintlayout:2.1.4’
implementation ‘androidx.recyclerview:recyclerview:1.3.2’
testImplementation ‘junit:junit:4.13.2’
androidTestImplementation ‘androidx.test.ext:junit:1.1.5’
androidTestImplementation ‘androidx.test.espresso:espresso-core:3.5.1’
}
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath ‘com.android.tools.build:gradle:8.2.0’ // Compatible with AGP 8.0+
// Using Kotlin plugin is common even for Java projects in modern Android
classpath ‘org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0’
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
tasks.register(‘clean’, Delete) {
delete rootProject.buildDir
}
IV. Project link in Cloud
Download MyStudyHelper APK
References
1. Android
Developers.
(2025).
Build
your
first
app.
Retrieved
November
7,
2025,
from
2. Google Play. (2025). Launch your app on Google Play. Retrieved November 7, 2025, from
3. Firebase. (2025). App distribution. Retrieved November 7, 2025, from
4. Material Design. (2025). Material Design guidelines. Google. Retrieved November 7, 2025, from
5. GitHub Docs. (2025). Creating a repository. Retrieved November 7, 2025, from
6. Android
Developers.
(2025).
Data
storage
overview.
Retrieved
November
7,
2025,
from
November
7,
2025,
from
7. Android
Developers.
(2025).
RecyclerView
guide.
Retrieved
Purchase answer to see full
attachment