0% found this document useful (0 votes)
31 views87 pages

Budget Tracker App for Personal Finance

Uploaded by

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

Budget Tracker App for Personal Finance

Uploaded by

jahanzaib fazal
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Budget Tracker

By
Wishma Hassan 2020-GCUF-095407
Aftab Kaleem 2020-GCUF-095366
Jahanzaib Fazal 2020-GCUF-095403

Project submitted in partial fulfilment of


the requirements for the degree of

BACHOLAR OF SCIENCE
IN
COMPUTER SCIENCE

DEPARTMENT OF INFORMATION TECHNOLOGY


GC UNIVERSITY, [Link] CAMPUS

2024

1
DECLARATION

The work reported in this thesis was carried out by me under the supervision of Mr. Ali
Shah Department of Information Computer Science GC University, Faisalabad, Layyah
campus Pakistan.

I hereby declare that the title of thesis Budget Tracker and the contents of thesis are
the product of my own research and no part has been copied from any published source
(except the references, standard mathematical or genetic models /equations
/formulas/protocols etc). I further declare that this work has not been submitted for award
of any other degree /diploma. The University may take action if the information provided
is found inaccurate at any stage.

Signature of the Student


Wishma Hassan
2020-GCUF-095407

Signature of the Student


Aftab Kaleem
2020-GCUF-095366

Signature of the Student


Jahanzaib Fazal
2020-GCUF-095403

2
CERTIFICATE BY SUPERVISORY COMMITTEE

We certify that the contents and form of thesis submitted by Wishma Hassan Registration
No: 2020-GCUF-095407 and by Aftab Kaleem Registration No: 2020-GCUF-095366 and
by Jahanzaib Fazal Registration No: 2020-GCUF-095403. Has been Found satisfactory
and in accordance with the prescribed format. We recommend it to be processed for the
evaluation by the External Examiner for the award of Degree.

Signature of Supervisor ………………….


Name.……………………………..………
Designation with stamp………………….

Member of Supervisory Committee


Signature …………….. ………………….
Name.……………………………..………
Designation with stamp………………….

Member of Supervisory Committee


Signature …………….. ………………….
Name.……………………………..………
Designation with stamp………………….
Chairperson

Signature …………….. ………………….


Name.……………………………..………
Designation with stamp………………….

3
DEDICATED

TO

My Graceful and Polite PARENTS

&

All Family Members

Who live in my mind and soul

Whose love is more precious

Than pearls and diamonds

Who are those whom I say my own

Whose love will never change

Whose prayers will never die

4
ACKNOWLEDGEMENTS

All praise to ALMIGHTY ALLAH, the most merciful and the most
compassionate and his Holy Prophet ‘MUHAMMAD’(Peace) be upon him) the most
perfect and exalted among and even born on the surface of earth, who is, forever a torch
of guidance and knowledge for the humanity as a whole.

The work presented in this manuscript was accomplished under the inspiring
guidance, gorgeous assistance, constructive criticism and enlightened supervision of
[Link] Shah Department of Computer Sciencs GC University, Faisalabad Layyah
campus for his skilful guidance, constructive criticism, masterly advice, valuable
suggestions and sympathetic behaviour for the completion of this manuscript.

I feel highly privileged to take this opportunity to express my heartiest gratitude


and deep sense of indebt to my worthy supervisory committee, Mr. Ali Shah Department
of Computer Science GC University, Faisalabad Layyah campus under whose kind and
scholastic guidance, keen interest and constant encouragement.

Words are very important to convey thoughts and thanks, the words are
impossible to find to thank our Father and whole family for their prayers and
encouragement for us and for our work.

Finally, I apologize if I have caused anger of offence to anybody and the errors
that remain in the manuscript are mine alone.

Wishma Hassan

Aftab Kaleem

Jahanzaib Fazal

5
Table of Contents
Introduction
1.1 Background

1.2 Overview.……...……………………………………………………………………8

1.3 Scope and Objectives.


……………………………………………………………….8

1.4 Assignment of Roles and Responsibilities.....................................................


……….9

1.5 Project Schedule…………………………………………………………………….9

1.6 Project Management Plan......................................................................................…9

2 Requirements Specification
2.1 Non-functional Requirements….

2.1.1 Product requirements

2.1.2 Organisational requirements

2.1.3 External requirements

2.2 Functional Requirements

2.2.1 Category 1

2.2.2 Category 2

2.2.3 Category 3

2.2.4 Category 4

3 Analysis
3.1 Domain Model

3.2 Stakeholders

3.3 Use Case Model / Scenarios

3.4 Use Case Description / Scenario

3.5 Flow of system

6
3.6 System Sequence Modeling

4 Project Design
4.1 Methodology

4.2 Architecture Overview

4.3 Database Design

4.3 Design Description

4.3.1 Module 1

4.3.2 Module 2

4.3.3 Module 3

5 Implementation
5.1 Development Stages

5.2 Key Components

5.3 User Interface

5.3.1 <UI Component 1>

5.3.2 <UI Component 2>

6 Testing
6.1 Unit Testing

6.2 Function Testing

6.2.1 Testing Requirements < A, B, C>

6.2.2 Testing Requirements < A, B, C>

6.3 Results

7 Conclusions & Future Work


References
Appendix
Appendix A: HDL or Source Code
Appendix B: Hardware Schematics
Appendix C: List of Components
Appendix D: Project Timeline

7
Introduction
The “Budget Tracker” has been developed to override the problems prevailing in the
practicing manual system. The software is supported to eliminate and in some cases
reduce the hardships faced by this existing system. The application is reduced as much as
possible to avoid errors while entering invalid data. No formal knowledge is needed for
the user to use this system. Thus by this all it provides it is user-friendly. Expense Tracker
Management, as described above, can lead to error free, secure, reliable and fast
management system. It can assist the user to concentrate on their other activities rather to
concentrate on the record keeping. Thus it will help organization in better utilization of
resources. This is designed to assist in strategic planning, and will help you ensure that
your organization is equipped with the right level of information and details for your
future goals.

1.1 Background:
The Budget Tracker App is being developed in response to the growing
demand for digital solutions to personal finance management. With increasing
reliance on smartphones and digital platforms for everyday tasks, there is a need for
an intuitive and efficient tool to help individuals track their expenses, set budgets, and
achieve their financial goals.

1.2 Overview:
The Budget Tracker App is a comprehensive financial management tool
designed to empower users to take control of their finances. With features such as
expense tracking, budget setting, customizable categories, insightful analytics, and
user-friendly interface, the app aims to simplify the process of managing money and
promoting financial wellness.

1.3 Scope and Objectives:


The Budget Tracker App will encompass a range of features to
address various aspects of personal finance management, including expense tracking,

8
budget planning, goal setting, and financial analysis. The primary objectives of the
project are to provide users with a convenient and effective tool for managing their
budgets, promoting financial literacy, and ultimately improving their financial well-
being.

1.4 Assignment of Roles and Responsibilities:


The development team responsible for the
Budget Tracker App consists of a project manager, software developers, UI/UX
designers, quality assurance testers, and marketing specialists. Each team member has
specific roles and responsibilities to ensure the successful development, testing, and
promotion of the app.

1.5 Project Schedule:


The development timeline for the Budget Tracker App is structured
into distinct phases, including planning, design, development, testing, and
deployment. Key milestones include completing the app's prototype, conducting user
testing, implementing feedback, and launching the app on multiple platforms. The
project schedule is designed to ensure timely delivery while maintaining high-quality
standards.

1.6 Project Management Plan:


The project management plan for the Budget Tracker App
includes the use of agile methodologies, regular team meetings, and communication
tools such as Slack and Trello to facilitate collaboration and transparency. Risk
management strategies are also implemented to identify and mitigate potential
challenges throughout the development process.

9
2. Requirements Specification

2.1 Non-functional Requirements

Certainly! Here's a concise summary of additional non-functional requirements for our


Budget Tracker App:

Performance: Fast response times, scalability to handle growth, and reliable operation
without crashes or data loss.

Security: Encryption for sensitive data, secure authentication, and protection against
common security threats.

Accessibility: Support for users with disabilities, including keyboard navigation and
screen reader compatibility.

Compatibility: Compatibility with various devices, screen sizes, and operating systems
for a consistent user experience.

Usability: Intuitive interface, clear navigation, and helpful onboarding for users of all
technical levels.

Localization: Support for multiple languages and cultural preferences to cater to a


diverse user base.

Regulatory Compliance: Adherence to relevant laws and regulations governing financial


services and data protection.

Documentation and Support: Comprehensive documentation and support resources for


users, including guides and customer support channels.

10
2.1.1 Product Requirements:

The Budget Tracker App should have a clean and


intuitive user interface to ensure ease of use for users of all levels of tech-savviness.

It must be compatible with major operating systems, including iOS and Android, to reach
a wide user base.

The app should be responsive and performant, providing smooth user experience even on
devices with lower processing power.

2.1.2 Organizational Requirements:

The development team must adhere to coding


standards and best practices to ensure maintainability and scalability of the app.

Regular backups of user data should be implemented to prevent data loss in case of
system failures or user errors.

The app's development process should comply with relevant legal and regulatory
requirements regarding data privacy and security.

2.1.3 External Requirements:

The Budget Tracker App should integrate seamlessly with


popular financial institutions and payment platforms to enable automatic transaction
syncing and categorization.

It should support multiple languages and currencies to cater to users from diverse
geographical regions.

Accessibility features should be implemented to ensure the app is usable by individuals


with disabilities.

11
2.2 Functional Requirements

functional requirements for our Budget Tracker App is:

User Registration and Authentication: Users can register and log in securely.

Expense Tracking: Users can add, categorize, and track expenses.

Budget Setting and Monitoring: Users can set and monitor budgets for different
categories.

Financial Reporting and Analysis: Users can view reports and insights on their
finances.

Goal Setting and Tracking: Users can set and track financial goals.

Customization and Personalization: Users can customize settings and receive


personalized recommendations.

Integration with External Services: App integrates with banks and financial platforms.

2.2.1 Category 1:

Users should be able to securely log in to their accounts and access their financial data
from any device.

The app should provide a dashboard summarizing users' current financial status,
including income, expenses, and available budget.

2.2.2 Category 2:

Users should be able to categorize their expenses into customizable categories (e.g.,
groceries, transportation, entertainment).

The app should allow users to set budget limits for each category and receive notifications
when they exceed these limits.

12
2.2.3 Category 3:

Users should be able to manually add transactions and specify details such as date,
amount, category, and notes.

The app should support automatic transaction importing from linked bank accounts and
credit cards, with the ability to review and categorize transactions.

2.2.4 Category 4:

The Budget Tracker App should provide users with insights and analytics to help them
understand their spending habits and make informed financial decisions.

It should generate customizable reports and visualizations, such as charts and graphs, to
display trends and patterns in users' financial data.

Feel free to let me know if you need further elaboration or if there's anything else I can
assist you with!

13
3. Analysis

3.1 Domain Model:

The domain model for the Budget Tracker App encompasses key
entities and their relationships within the context of personal finance management. This
includes entities such as users, transactions, categories, budgets, and financial institutions.

3.2 Stakeholders:

Stakeholders in the Budget Tracker App project include end-users


who will utilize the app to manage their finances, as well as the development team
responsible for designing, developing, and maintaining the app. Other stakeholders may
include financial advisors, regulatory bodies, and potential investors.

3.3 Use Case Model / Scenarios:

The use case model outlines various scenarios in


which users interact with the Budget Tracker App to achieve specific tasks or goals. This
includes scenarios such as user registration, logging transactions, setting budgets,
generating reports, and analyzing financial data.

3.4 Use Case Description / Scenario:

Use case descriptions provide detailed narratives of


specific user interactions with the Budget Tracker App. For example, a use case scenario
might describe the process of a user adding a new transaction, including steps such as
selecting the transaction type, entering the amount, specifying the category, and adding
optional notes.

14
3.5 Flow of System:

The flow of the system describes the sequence of steps involved in


various processes within the Budget Tracker App. This includes flows such as user
authentication, transaction entry, budget setting, data analysis, and report generation.
Each flow illustrates how users navigate through different screens and interact with the
app's features.

3.6 System Sequence Modeling:

System sequence modeling involves capturing the


interactions between users and the Budget Tracker App in the form of sequences of
messages or events. This helps to identify the inputs, outputs, and actions performed by
the system in response to user requests. For example, a system sequence diagram might
depict the steps involved in retrieving transaction data from a linked bank account and
categorizing it within the app.

15
4. Project Design

4.1 Methodology:

The development methodology chosen for the Budget Tracker App


is Agile. This iterative approach allows for flexibility and responsiveness to changing
requirements throughout the development process. It enables the development team to
deliver working software incrementally, ensuring continuous improvement based on user
feedback.

4.2 Architecture Overview:

The architecture of the Budget Tracker App follows a


client-server model, with a mobile application serving as the client and a backend server
handling data storage, processing, and business logic. The app's architecture is designed
to be scalable, modular, and secure, with clear separation of concerns between client-side
and server-side components.

4.3 Database Design:

The database design for the Budget Tracker App includes tables
to store user accounts, transactions, categories, budgets, and other relevant data. It is
designed to be efficient, normalized, and scalable to accommodate a growing user base
and increasing volumes of financial data.

4.4 Design Description:

16
The design description outlines the high-level architecture
and design considerations for the Budget Tracker App.

4.4.1 Module 1:

Module 1 of the Budget Tracker App is responsible for user


authentication and account management. It includes features such as user registration,
login, password management, and profile settings.

4.4.2 Module 2:

Module 2 focuses on transaction management, allowing users to add,


view, edit, and categorize their financial transactions. It includes features for manual
transaction entry, transaction importing, and transaction history tracking.

4.4.3 Module 3:

Module 3 handles budget management, enabling users to set budget


limits for different expense categories and track their spending against these budgets. It
includes features for budget creation, modification, and monitoring, as well as
notifications for budget thresholds.

17
5. Implementation

5.1 Development Stages:

The development of the Budget Tracker App is divided into


several stages, including planning, design, development, testing, and deployment. Each
stage is essential for ensuring the quality and functionality of the app.

5.2 Key Components:

Key components of the Budget Tracker App include the client-


side mobile application, backend server, database, and various APIs for integration with
external services such as banking institutions and payment platforms. These components
work together to provide users with a seamless and reliable financial management
experience.

5.3 User Interface:

The user interface of the Budget Tracker App is designed to be


intuitive, user-friendly, and visually appealing. It incorporates modern design principles
and follows platform-specific guidelines for iOS and Android devices.

5.3.1 <UI Component 1>:

One of the UI components of the Budget Tracker App is


the dashboard, which provides users with an overview of their current financial status,
including income, expenses, and available budget. The dashboard may include

18
visualizations such as charts and graphs to help users understand their financial data at a
glance.

5.3.2 <UI Component 2>:

Another UI component of the Budget Tracker App is the


transaction entry screen, where users can manually add new transactions or review and
categorize imported transactions. This component is designed to be simple and intuitive,
with options for specifying transaction details such as date, amount, category, and notes.

19
6. Testing

6.1 Unit Testing:

Unit testing involves testing individual components or modules of


the Budget Tracker App in isolation to ensure they function correctly. This ensures that
each unit of code performs as expected and helps identify and fix bugs early in the
development process.

6.2 Function Testing:

Function testing focuses on testing the functionality of the


Budget Tracker App as a whole, including its features and interactions. This involves
verifying that each feature meets its requirements and performs as intended.

6.2.1 Testing Requirements < A, B, C>:

Testing requirements A, B, and C specify


the criteria that must be met during function testing. These criteria may include user
scenarios, edge cases, and performance benchmarks to ensure the reliability and usability
of the app.

6.2.2 Testing Requirements < A, B, C>:

Similar to the previous section, this part


outlines additional testing requirements that must be fulfilled during function testing.

20
These requirements may cover different aspects of the app's functionality, such as data
validation, error handling, and security.

6.3 Results:

The results of testing provide insights into the performance and quality of
the Budget Tracker App. This includes identifying any issues or defects uncovered during
testing and documenting the actions taken to address them. Additionally, the results may
include metrics such as test coverage, pass rates, and user feedback to assess the overall
effectiveness of the testing process.

21
[Link] & Future Work

Conclusion
In conclusion, the development of our budget tracker app is an important step
in empowering users to manage their finances. Through careful design and
implementation, we have created a user-friendly platform that seamlessly integrates
budgeting, expense tracking and financial goal setting. Our app not only provides
insightful research and flexibility but also promotes financial literacy and
[Link] the importance of individuals keeping a close eye on their finances,
our Budget Tracker application is emerging as a reliable solution that caters to a variety
of user needs and preferences. By leveraging technology, we aim to simplify the complex
financial system and empower users to make informed financial decisions. As we move
forward, our commitment remains resolute to continue to enhance app functionality,
enhance user experience, and add new features to meet the evolving demands of our users
Usage We believe that our Budget Tracker app will promote financial well-being and
instill a culture of financial responsibility among our users. And it will be a valuable tool.

Future Work

A. AI and Machine learning


Integrating AI and gadget gaining knowledge of into our
budget tracker app gives a thrilling future scope with multifaceted advantages.
Firstly, AI can decorate the app's predictive capabilities, allowing it to investigate
past spending patterns and are expecting destiny fees more correctly. This predictive
evaluation can empower users to make informed economic decisions and better
control their budgets. Additionally, gadget getting to know algorithms can
personalize the app's recommendations and insights based totally on individual
spending conduct, thereby supplying tailored advice to users for optimizing their
economic fitness. Moreover, AI-powered capabilities inclusive of natural language
processing can streamline statistics entry tactics, allowing customers to results easily
enter transactions via voice commands or text popularity. Furthermore, through
leveraging AI-pushed information analytics, the app can discover ability areas for
cost-saving and offer proactive guidelines to users, thereby fostering higher financial

22
planning and wealth accumulation. Overall, the mixing of AI and system getting to
know holds monstrous capacity to revolutionize our price range tracker app, making
it greater intuitive, personalized, and effective in assisting users achieve their
financial goals.

B. Mobile and App integration


Integrating cellular and app integration into our
finances tracker app holds tremendous promise for boosting user enjoy and
accessibility. By leveraging mobile integration, our app can seamlessly sync with
users' mobile gadgets, taking into consideration actual-time updates and notifications
on their spending habits, budgets, and monetary dreams. This guarantees that
customers have get admission to their economic statistics whenever, everywhere,
empowering them to stay on top of their price range at the pass. Moreover, app
integration opens up opportunities for incorporating extra functions and
functionalities thru partnerships with other apps and offerings. For example,
integrating with banking apps can permit automatic transaction categorization and
syncing, decreasing manual statistics entry for customers. Similarly, integration with
cost tracking apps, receipt scanners, or digital wallets can streamline expense control
and facilitate greater comprehensive price range tracking. Furthermore, leveraging
cellular competencies along with push notifications, region offerings, and biometric
authentication can enhance the app's protection and person engagement. Push
notifications can alert customer’s approximately upcoming payments, overspending,
or budget milestones, helping them live accountable to their economic desires.
Location offerings can provide context-conscious insights, including figuring out
spending styles at unique merchants or places. Additionally, implementing biometric
authentication functions like fingerprint or facial reputation adds an extra layer of
protection at the same time as simplifying the login process for users. Overall,
cellular and app integration offers a compelling future scope for our finances tracker
app, imparting superior capability, accessibility, and consumer engagement. By
seamlessly integrating with customers' mobile gadgets and leveraging partnerships
with complementary apps and services, we are able to create a stronger and
consumer-friendly platform for powerful price range management and financial
empowerment.

C. Economic trends Analysis


Incorporating robust offline capabilities represents a huge
location of growth and possibility for finances tracker apps, specifically in
anticipation of destiny trends. As technological improvements continue to reshape
the panorama of private finance, offline functionality stands out as a vital feature that
enhances the versatility and resilience of price range tracker applications. One issue
of the future scope lies within the refinement and growth of offline functions. This
includes the development of sophisticated offline modes that enable customers to
perform vital obligations inclusive of price tracking, finances making plans, and
economic evaluation without requiring an internet connection. Advanced offline

23
capabilities may also encompass the potential to synchronize information seamlessly
when the tool reconnects to the internet, making sure consistency across multiple
structures and gadgets. Moreover, the mixing of offline competencies opens
doorways to new consumer segments and markets. In areas with limited net get
admission to or unreliable connectivity, finances tracker apps with sturdy offline
functionality can cater to the wishes of underserved populations, thereby increasing
their attain and impact. Similarly, vacationers, outside fanatics, and individuals in
remote areas can enjoy the comfort of dealing with their finances offline, making
price range tracker apps integral companions in diverse contexts. Furthermore, the
destiny scope of budget tracker apps with offline capabilities extends to stronger
records safety and privacy measures. By allowing customers to keep sensitive
economic records locally on their devices, those apps decrease the threat of
information breaches and unauthorized get admission to. Implementing advanced
encryption protocols and biometric authentication in addition reinforces the security
of offline statistics, instilling confidence and accept as true with amongst customers.
In conclusion, the destiny scope of budget tracker apps with recognize to offline
competencies encompasses the refinement of features, enlargement into new markets,
and heightened security features. By prioritizing offline functionality, builders can
position their apps as crucial equipment for monetary management, offering users
reliability, comfort, and peace of mind in a more and more virtual international.

References

[1] Mint: Budget Tracker & Planner. [Online].


[Link]

[2] YNAB You Need A Budget. [Online].


[Link]

[3] Walley: Personal Finance. [Online].


[Link]

[4] Tycoon App. [Online].


[Link]

[5] Coinbase App. [Online].


[Link]

[6] Robinhood App. [Online].


[Link]

[7] Acorns. [Online].

24
[Link]

[8] Venmo: Payment app for splitting the cost of a pizza with friends
[Link]

[9] Wealthfront: High-Interest Cash, Free Financial Planning


[Link]

[10] Mvelopes. [Online].


[Link]

[11] Personal Capital


[Link]

[12] Penny and Credit Karma. [Online].


[Link]
karma/

[13] TOSHL Finance. [Online].


[Link]

[14] Best Budget Apps . [Online].


[Link]

[15] Finance Apps for small business owners. [Online].


[Link]

[16] The best personal Finance Apps . [Online].


[Link]

[17] Managing your money . [Online].


[Link]

[18] Beginners guide to managing your money . [Online].


[Link]
your-money

[19] Essential steps to manage your money . [Online].


[Link]

[20] Simple ways to manage your money . [Online].


[Link]

25
Appendix

Appendix A: Source Code

[Link]
package [Link];

//import [Link];

public class Data {


//extends [Link]
private int amount;
private String type;
private String note;
private String id;

public Data(int amount, String type, String note, String id, String
date)
{

[Link] = amount;
[Link] = type;
[Link] = note;
[Link] = id;
[Link] = date;
}

private String date;


public Data(){}

public int getAmount(){return amount;}

public void setAmount(int amount) {


[Link] = amount;

26
}

public String getType() {


return type;
}

public void setType(String type) {


[Link] = type;
}

public String getNote() {


return note;
}

public void setNote(String note) {


[Link] = note;
}

public String getId() {


return id;
}

public void setId(String id) {


[Link] = id;
}

public String getDate() {


return date;
}

public void setDate(String date) {


[Link] = date;
}
}

[Link]
package [Link];

import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class about extends AppCompatActivity {

TextView vname;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_about);

vname=findViewById([Link]);
[Link]("v"+[Link](BuildConfig.VERSION_NAME));

27
ImageView back_arrow=findViewById([Link]);
back_arrow.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}

change_password.java
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class change_password extends AppCompatActivity {

private Button changePass;

private FirebaseAuth mAuth;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_change_password);

mAuth= [Link]();
FirebaseUser user=[Link]();

changePass=findViewById([Link]);

EditText oldPass=findViewById([Link].old_pass);
EditText NewPass=findViewById([Link].new_pass);

[Link](new [Link]() {
@Override
public void onClick(View v) {
String oldString=[Link]().toString().trim();
String newString=[Link]().toString().trim();

28
if([Link](oldString)){
[Link]("Required Field..",null);
return;
}
if([Link](newString)){
[Link]("Required Field..",null);
return;
}

if([Link]()<6)
{
[Link]("Must contain at least 6
characters..",null);
return;
}

if([Link]()!=null) {
AuthCredential credential=
[Link]([Link](),oldString);

[Link](credential).addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task)
{
if([Link]())
{

[Link](newString).addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull
Task<Void> task) {
if([Link]())
{

[Link](change_password.this,"Password changed
successfully..",Toast.LENGTH_LONG).show();
Intent intent=new
Intent(change_password.this,home_screen.class);
startActivity(intent);
}
else
{

[Link](change_password.this,"Something went wrong. Please try


again later..",Toast.LENGTH_LONG).show();
}
}
});
}
}
});
}
}
});

ImageView back_arrow=findViewById([Link]);
back_arrow.setOnClickListener(new [Link]() {
@Override

29
public void onClick(View v) {
onBackPressed();
}
});
}
}

[Link]
package [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];

30
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];

public class DashboardFragment extends Fragment {

BarChart barChart;
BarData barData;
BarDataSet barDataSet;
ArrayList barEntries;
final String[] date=new String[10000000];

private FloatingActionButton fab_main;


private FloatingActionButton fab_income_btn;
private FloatingActionButton fab_expense_btn;

private TextView fab_income_txt;


private TextView fab_expense_txt;

private boolean isOpen=false;


private Animation FadOpen,FadClose,Rob,Rof;

//Dashboard income and expense result

private TextView totalIncomeResult;


private TextView totalExpenseResult;
private TextView totalBalanceResult;

static int totalsumexpense=0;


static int totalsumincome=0;
static int balance;

private FirebaseAuth mAuth;


private DatabaseReference mIncomeDatabase;
private DatabaseReference mExpenseDatabase;

//recycler view

private RecyclerView mRecyclerIncome;


private RecyclerView mRecyclerExpense;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View myview=[Link]([Link].fragment_dashboard,
container, false);

mAuth=[Link]();

31
FirebaseUser mUser=[Link]();

if([Link]()!=null) {

String uid = [Link]();

mIncomeDatabase =
[Link]().getReference().child("IncomeData").child(
uid);
mExpenseDatabase =
[Link]().getReference().child("ExpenseData").child
(uid);
}

fab_main=[Link]([Link].fb_main_lus_btn);
fab_income_btn=[Link]([Link].income_ft_btn);
fab_expense_btn=[Link]([Link].expense_ft_btn);
fab_income_txt=[Link]([Link].income_ft_text);
fab_expense_txt=[Link]([Link].expense_ft_text);

//Tatal inc and exp

totalIncomeResult=[Link]([Link].income_set_result);
totalExpenseResult=[Link]([Link].expense_set_result);
totalBalanceResult=[Link]([Link].balance_set_result);

//Recycler

mRecyclerIncome=[Link]([Link].recycler_income);
mRecyclerExpense=[Link]([Link].recycler_expense);

FadOpen=
[Link](getActivity(),[Link].fab_open);

FadClose=[Link](getActivity(),[Link].fab_close);

Rob=[Link](getActivity(),[Link].rotate_backward);

Rof=[Link](getActivity(),[Link].rotate_forward);

barChart=[Link]([Link].bar_chart);
ValueEventListener event2=new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
getBarEntries(snapshot);
barDataSet=new BarDataSet(barEntries,"Expenses");
barData=new BarData(barDataSet);
[Link](barData);
[Link]().setText("Expenses Per Day");
XAxis xval=[Link]();
[Link](true);
[Link](new
IndexAxisValueFormatter(date));
[Link](ColorTemplate.MATERIAL_COLORS);
[Link]([Link]);
[Link](16f);
[Link]();
[Link]();
[Link]();

32
}

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
};
[Link](event2);

fab_main.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {

addData();

if(isOpen){
fab_main.startAnimation(Rof);
fab_income_btn.startAnimation(FadClose);

fab_expense_btn.startAnimation(FadClose);

fab_income_btn.setClickable(false);
fab_expense_btn.setClickable(false);

fab_income_txt.startAnimation(FadClose);
fab_expense_txt.startAnimation(FadClose);
fab_income_txt.setClickable(false);
fab_expense_txt.setClickable(false);
isOpen=false;

else{
fab_main.startAnimation(Rob);
fab_income_btn.startAnimation(FadOpen);

fab_expense_btn.startAnimation(FadOpen);

fab_income_btn.setClickable(true);
fab_expense_btn.setClickable(true);

fab_income_txt.startAnimation(FadOpen);
fab_expense_txt.startAnimation(FadOpen);
fab_income_txt.setClickable(true);
fab_expense_txt.setClickable(true);
isOpen=true;

}
});

[Link](new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {

totalsumexpense=0;
for(DataSnapshot mysnap:[Link]()){

33
Data data=[Link]([Link]);
totalsumexpense+=[Link]();

String strResult=[Link](totalsumexpense);

[Link](strResult+".00");

}
balance=totalsumincome-totalsumexpense;
String strBalance=[Link](balance);
[Link](strBalance+".00");
}

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
});

//calc total income

[Link](new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {

totalsumincome=0;
for(DataSnapshot mysnap:[Link]()){

Data data=[Link]([Link]);
totalsumincome+=[Link]();

String stResult=[Link](totalsumincome);

[Link](stResult+".00");

}
balance=totalsumincome-totalsumexpense;
if(balance>0.05*totalsumincome &&
balance<=0.1*totalsumincome){
[Link]
builder=new [Link](getActivity());
[Link]("Less than 10% balance
remaining!");
[Link]("Need to control your
expenses.");
[Link]("OK", new
[Link]() {
@Override
public void onClick(DialogInterface dialog, int
which) {
//finishAffinity();
//startActivity(new
Intent(getActivity(),[Link]));
[Link]();
}
});
[Link]();
}
else if(balance>0.0*totalsumincome &&
balance<=0.05*totalsumincome)
{[Link] builder=new

34
[Link](getActivity());
[Link]("Less than 5% balance remaining!");
[Link]("Need to control your
expenses.");
[Link]("OK", new
[Link]() {
@Override
public void onClick(DialogInterface dialog, int
which) {
//finishAffinity();
//startActivity(new
Intent(getActivity(),[Link]));
[Link]();
}
});
[Link]();
}
String strBalance=[Link](balance);
[Link](strBalance+".00");
}

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
});

//Recycler

LinearLayoutManager layoutManagerIncome =new


LinearLayoutManager(getActivity(),[Link],false);

[Link](true);
[Link](true);
[Link](true);
[Link](layoutManagerIncome);

LinearLayoutManager layoutManagerExpense =new


LinearLayoutManager(getActivity(),[Link],false);

[Link](true);
[Link](true);
[Link](true);
[Link](layoutManagerExpense);

return myview;
}

private void ftAnimation(){


if(isOpen){
fab_main.startAnimation(Rof);
fab_income_btn.startAnimation(FadClose);

fab_expense_btn.startAnimation(FadClose);

fab_income_btn.setClickable(false);
fab_expense_btn.setClickable(false);

fab_income_txt.startAnimation(FadClose);
fab_expense_txt.startAnimation(FadClose);
fab_income_txt.setClickable(false);

35
fab_expense_txt.setClickable(false);
isOpen=false;

else{
fab_main.startAnimation(Rob);
fab_income_btn.startAnimation(FadOpen);

fab_expense_btn.startAnimation(FadOpen);

fab_income_btn.setClickable(true);
fab_expense_btn.setClickable(true);

fab_income_txt.startAnimation(FadOpen);
fab_expense_txt.startAnimation(FadOpen);
fab_income_txt.setClickable(true);
fab_expense_txt.setClickable(true);
isOpen=true;

private void addData(){


fab_income_btn.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {
incomeDataInsert();

}
});

fab_expense_btn.setOnClickListener(new [Link](){

@Override
public void onClick(View v) {
expenseDataInsert();
}
});

public void incomeDataInsert(){


[Link] mydialog=new
[Link](getActivity());

LayoutInflater inflater=[Link](getActivity());

View
myviewm=[Link]([Link].custom_layout_for_insertdata,null);
[Link](myviewm);
AlertDialog dialog=[Link]();

EditText edtAmount=[Link]([Link].amount_edt);
EditText edtType=[Link]([Link].type_edt);
EditText edtNote=[Link]([Link].note_edt);

Button btnSave=[Link]([Link]);

36
Button btnCancel=[Link]([Link]);

[Link](new [Link]() {
@Override
public void onClick(View v) {
String type=[Link]().toString().trim();
String amount=[Link]().toString().trim();
String note=[Link]().toString().trim();

if([Link](amount)){
[Link]("Required Field..");
return;
}
int ouramountint=[Link](amount);
if([Link](type)){
[Link]("Required Field..");
return;
}
if([Link](note)){
[Link]("Required Field..");
return;
}

if([Link]()!=null) {
String id = [Link]().getKey();
String mDate =
[Link]().format(new Date());
Data data = new Data(ouramountint, type, note, id,
mDate);

[Link](id).setValue(data);
[Link](getActivity(),"Data
ADDED",Toast.LENGTH_SHORT).show();
}

ftAnimation();
[Link]();
}
});
[Link](new [Link]() {
@Override
public void onClick(View v) {
ftAnimation();
[Link]();
}
});
[Link]();
}
public void expenseDataInsert(){
[Link] mydialog=new
[Link](getActivity());

LayoutInflater inflater=[Link](getActivity());

View
myviewm=[Link]([Link].custom_layout_for_insertdata,null);
[Link](myviewm);
final AlertDialog dialog=[Link]();
[Link](false);

EditText edtAmount=[Link]([Link].amount_edt);

37
EditText edtType=[Link]([Link].type_edt);
EditText edtNote=[Link]([Link].note_edt);

Button btnSave=[Link]([Link]);
Button btnCancel=[Link]([Link]);

[Link](new [Link]() {
@Override
public void onClick(View v) {
String type=[Link]().toString().trim();
String amount=[Link]().toString().trim();
String note=[Link]().toString().trim();

if([Link](amount)){
[Link]("Required Field..");
return;
}
int ouramountinte=[Link](amount);
if([Link](type)){
[Link]("Required Field..");
return;
}
if([Link](note)){
[Link]("Required Field..");
return;
}
if([Link]()!=null && balance!=0.0 &&
balance>0.0) {
String id = [Link]().getKey();
String mDate =
[Link]().format(new Date());
Data data = new Data(ouramountinte, type, note, id,
mDate);

[Link](id).setValue(data);
[Link](getActivity(),"Data
ADDED",Toast.LENGTH_SHORT).show();
}
ftAnimation();
[Link]();
}
});
[Link](new [Link]() {
@Override
public void onClick(View v) {
ftAnimation();
[Link]();
}
});
[Link]();
}

@Override
public void onStart() {
[Link]();

FirebaseRecyclerAdapter<Data,IncomeViewHolder>incomeAdapter=new
FirebaseRecyclerAdapter<Data, IncomeViewHolder>
(
[Link],
[Link].dashboard_income,

38
[Link],
mIncomeDatabase
) {
@Override
protected void populateViewHolder(IncomeViewHolder
incomeViewHolder, Data model, int position) {
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
}
};
[Link](incomeAdapter);

FirebaseRecyclerAdapter<Data,ExpenseViewHolder>expenseAdapter=new
FirebaseRecyclerAdapter<Data, ExpenseViewHolder>

([Link],[Link].dashboard_expense,[Link]
[Link],mExpenseDatabase) {
@Override
protected void populateViewHolder(ExpenseViewHolder
expenseViewHolder, Data data, int i) {

[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
}
};
[Link](expenseAdapter);

//For Income Data


public static class IncomeViewHolder extends
[Link]{

View mIncomeView;

public IncomeViewHolder(View itemView)


{
super(itemView);
mIncomeView=itemView;
}
public void setIncomeType(String type)
{
TextView
mtype=[Link]([Link].type_Income_ds);
[Link](type);
}
public void setIncomeAmount(int amount)
{
TextView
mAmount=[Link]([Link].amount_Income_ds);
String strAmount= [Link](amount);
[Link](strAmount);
}
public void setIncomeDate(String date)
{
TextView
mDate=[Link]([Link].date_Income_ds);
[Link](date);

39
}
}

//For expense data


public static class ExpenseViewHolder extends
[Link]{

View mExpenseView;

public ExpenseViewHolder(View itemView)


{
super(itemView);
mExpenseView=itemView;
}
public void setExpenseType(String type)
{
TextView
mtype=[Link]([Link].type_Expense_ds);
[Link](type);
}
public void setExpenseAmount(int amount)
{
TextView
mAmount=[Link]([Link].amount_Expense_ds);
String strAmount= [Link](amount);
[Link](strAmount);
}
public void setExpenseDate(String date)
{
TextView
mDate=[Link]([Link].date_Expense_ds);
[Link](date);
}
}

private void getBarEntries(DataSnapshot snap)


{

Log.d("ExpenseData","Reading Data");

barEntries=new ArrayList();

float a=1f;
int a1=1;
if([Link]()) {
for (DataSnapshot ds : [Link]()) {
Data data = [Link]([Link]);
//String date = [Link]();
date[a1]=[Link]().substring(0,7);

float amm = [Link]();


//String
name=[Link]([Link]()).child("type").getValue([Link]);

//Data data=[Link]([Link]);
//String name=[Link]();
[Link](new BarEntry(a,amm));

a=a+1;
a1=a1+1;
}

40
}
}
}

[Link]
package [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class emi extends AppCompatActivity {

Button emiCalcBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_emi);

final EditText P = findViewById([Link]);


final EditText I = findViewById([Link]);
final EditText Y = findViewById([Link]);
final EditText TI = findViewById([Link].interest_total);
final EditText result = findViewById([Link]) ;

emiCalcBtn = findViewById([Link].btn_calculate2);

[Link](new [Link]() {
@Override
public void onClick(View v) {

String st1 = [Link]().toString();


String st2 = [Link]().toString();
String st3 = [Link]().toString();

if ([Link](st1)) {
[Link]("Enter Principal Amount");
[Link]();
return;
}

41
if ([Link](st2)) {
[Link]("Enter Interest Rate");
[Link]();
return;
}

if ([Link](st3)) {
[Link]("Enter Years");
[Link]();
return;
}

float p = [Link](st1);
float i = [Link](st2);
float y = [Link](st3);

float Principal = calPric(p);

float Rate = calInt(i);

float Months = calMonth(y);

float Dvdnt = calDvdnt( Rate, Months);

float FD = calFinalDvdnt (Principal, Rate, Dvdnt);

float D = calDivider(Dvdnt);

float emi = calEmi(FD, D);

float TA = calTa (emi, Months);

float ti = calTotalInt(TA, Principal);

[Link]([Link](emi));

[Link]([Link](ti));

}
});
}

public float calPric(float p) {

return (p);

public float calInt(float i) {

return (i/12/100);

public float calMonth(float y) {

return (y * 12);

42
public float calDvdnt(float Rate, float Months) {

return (float) ([Link](1+Rate, Months));

public float calFinalDvdnt(float Principal, float Rate, float


Dvdnt) {

return (Principal * Rate * Dvdnt);

public float calDivider(float Dvdnt) {

return (Dvdnt-1);

public float calEmi(float FD, Float D) {

return (FD/D);

public float calTa(float emi, Float Months) {

return (emi*Months);

public float calTotalInt(float TA, float Principal) {

return (TA - Principal);

}
}

[Link]
package [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

43
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];

public class ExpenseFragment extends Fragment {

private FirebaseAuth mAuth;


private DatabaseReference mExpenseDatabase;
private RecyclerView recyclerView;

private TextView expenseTotalSum;

private EditText edtAmount;


private EditText edtType;
private EditText edtNote;

private Button btnUpdate;


private Button btnDelete;

private String type;


private String note;
private int amount;

private String post_key;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
View myview=[Link]([Link].fragment_expense,
container, false);
mAuth=[Link]();
FirebaseUser mUser=[Link]();
if(mAuth!=null) {
String uid = [Link]();

mExpenseDatabase =
[Link]().getReference().child("ExpenseData").child
(uid);
}

expenseTotalSum=[Link]([Link].expense_txt_result);
recyclerView=[Link]([Link].recycler_id_expense);
LinearLayoutManager layoutManager=new
LinearLayoutManager(getActivity());

[Link](true);
[Link](true);
[Link](true);
[Link](layoutManager);

44
[Link](new ValueEventListener()
{

int totalvalue=0;

public void onDataChange(@NonNull DataSnapshot dataSnapshot)


{
for(DataSnapshot mysnapshot:[Link]()){
Data data=[Link]([Link]);
totalvalue=totalvalue+[Link]();
String stTotalvalue=[Link](totalvalue);
[Link](stTotalvalue+".00");

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
});

return myview;
}

@Override
public void onStart() {
[Link]();

FirebaseRecyclerAdapter<Data, [Link]>
adapter= new FirebaseRecyclerAdapter<Data,
[Link]>(

[Link],
[Link].expense_recycler_data,
[Link],
mExpenseDatabase
) {
@Override
protected void
populateViewHolder([Link] myViewHolder, Data
model, int position) {

[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());

[Link](new
[Link]() {
@Override
public void onClick(View v) {
post_key=getRef(position).getKey();

type=[Link]();
note=[Link]();
amount=[Link]();

45
updateDataItem();
}
});
}
};
[Link](adapter);
}

public static class MyViewHolder extends [Link]{

View mView;

public MyViewHolder(@NonNull View itemView) {


super(itemView);
mView=itemView;
}

private void setType(String type){


TextView mType=[Link]([Link].type_txt_expense);
[Link](type);
}
private void setNote(String note){
TextView mNote=[Link]([Link].note_txt_expense);
[Link](note);
}
private void setDate(String date){
TextView mDate=[Link]([Link].date_txt_expense);
[Link](date);
}
private void setAmount(int amount){
TextView
mAmount=[Link]([Link].amount_txt_expense);
String stamount=[Link](amount);
[Link]("-"+stamount);
}
}

private void updateDataItem() {


[Link] mydialog = new
[Link](getActivity());
LayoutInflater inflater = [Link](getActivity());
View myview = [Link]([Link].update_data_item, null);
[Link](myview);

edtAmount = [Link]([Link].amount_edt);
edtType = [Link]([Link].type_edt);
edtNote = [Link]([Link].note_edt);

//Set data to edit text..


[Link](type);
[Link]([Link]());

[Link](note);
[Link]([Link]());

[Link]([Link](amount));
[Link]([Link](amount).length());

btnUpdate = [Link]([Link].btn_upd_Update);
btnDelete = [Link]([Link].btnuPD_Delete);

46
AlertDialog dialog = [Link]();

[Link](new [Link]() {
@Override
public void onClick(View v) {
type = [Link]().toString().trim();
note = [Link]().toString().trim();

String mdAmount = [Link](amount);


mdAmount = [Link]().toString().trim();

int myAmount = [Link](mdAmount);

String mDate = [Link]().format(new


Date());

Data data = new Data(myAmount, type, note, post_key,


mDate);

[Link](post_key).setValue(data);

[Link]();
}
});

[Link](new [Link]() {
@Override
public void onClick(View v) {
[Link](post_key).removeValue();

[Link]();
}
});
[Link]();
}
}

[Link]
package [Link];

import [Link];

import [Link];
import
[Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];

import [Link];

47
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class feedback extends AppCompatActivity {

private FirebaseAuth mAuth;


private DatabaseReference mFeedbackDatabase;

String s1;

RatingBar ratingBar;
Button btnSubmit;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_feedback);

mAuth= [Link]();
FirebaseUser mUser=[Link]();
if(mAuth!=null) {
String uid = [Link]();

mFeedbackDatabase =
[Link]().getReference().child("Feedback").child(ui
d);
}

ratingBar=findViewById([Link].rating_bar);
btnSubmit=findViewById([Link].rating_btn);

[Link](new [Link]() {
@Override
public void onClick(View v) {
s1=[Link]([Link]());
HashMap hashMap=new HashMap();
[Link]("Rating",s1);

if([Link]()!=0.0)
{
String id = [Link]().getKey();

[Link]("Feedback").updateChildren(hashMap).addOnSuccess
Listener(new OnSuccessListener() {
@Override
public void onSuccess(Object o) {

[Link](getApplicationContext(),"Thanks for Rating


us..",Toast.LENGTH_SHORT).show();
[Link](0);
}
});
}
else
{
[Link](getApplicationContext(),"Please Rate
us!",Toast.LENGTH_SHORT).show();

48
}
}
});

ImageView back_arrow=findViewById([Link]);
back_arrow.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {
onBackPressed();
}
});

}
}

[Link]
package [Link];

import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class Finalinc extends AppCompatActivity {


TextView T1,T2,T3,T4,T5,T6,T7;
Button back,backmain;
String base,LTA,HRA,SA, A,B,C;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);

setContentView([Link].activity_finalinc);
back=(Button)findViewById([Link]);
backmain=(Button)findViewById([Link]);
[Link](new [Link]() {
@Override
public void onClick(View view) {
Intent i=new
Intent([Link],first_home_page.class);
startActivity(i);
}
});
[Link](new [Link]() {
@Override
public void onClick(View view) {
Intent i=new Intent([Link],[Link]);
startActivity(i);
}
});
T1=(TextView)findViewById([Link].t1);

T2=(TextView)findViewById([Link].t2);

49
T3=(TextView)findViewById([Link].t3);

T4=(TextView)findViewById([Link].t4);

T6=(TextView)findViewById([Link].t6);

T7=(TextView)findViewById([Link].t7);
Intent i=getIntent();
HRA=[Link]("hra");
LTA=[Link]("lta");
base=[Link]("base");
SA=[Link]("sa");
A=[Link]("80A");
B=[Link]("80B");
C=[Link]("80C");
int baseInt=[Link](base);
double HRAdouble=[Link](HRA);
double LTAdouble=[Link](LTA);
double SAdouble=[Link](SA);
double Adouble=[Link](A);
double Bdouble=[Link](B);
double Cdouble=[Link](C);
double totalIncome=baseInt+HRAdouble+LTAdouble+SAdouble;
[Link](base);
int forT2=(int)HRAdouble+(int)LTAdouble+(int)SAdouble;
[Link](""+forT2);
int totalG=baseInt+(int)HRAdouble+(int)LTAdouble+(int)SAdouble;
[Link](""+totalG);
double ded= (int)Adouble+(int)Bdouble+(int)Cdouble;
[Link](""+ded);

double grossdeduction=ded+50000;
int totaltaxable=(int)totalIncome-(int)grossdeduction;
[Link](""+totaltaxable);
double tax=0;
if(totaltaxable<250000){
tax=0;
}else if(totaltaxable>250000 && totaltaxable<500000){
tax=0.05*totaltaxable;

}
else if(totaltaxable>500000 && totaltaxable<1000000){
tax=0.20*totaltaxable;
}
else if(totaltaxable>1000000){
tax=0.30*totaltaxable;
}
[Link]("Total Tax: "+tax );

}
}

first_home_page.java

50
package [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import
[Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];

public class first_home_page extends AppCompatActivity implements


[Link] {

private BottomNavigationView bottomNavigationView;


private FrameLayout frameLayout;

private DashboardFragment dashboardFragment;


private IncomeFragment incomeFragment;
private ExpenseFragment expenseFragment;

private FirebaseAuth mAuth;

ArrayList<HashMap<String,Object>> items;
PackageManager pm ;
List<PackageInfo> packs;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_first_home_page);

51
Toolbar toolbar=findViewById([Link].my_toolbar);
[Link]("Spendee");
[Link]([Link]);

setSupportActionBar(toolbar);

bottomNavigationView=findViewById([Link]);
frameLayout=findViewById([Link].main_frame);
DrawerLayout drawerLayout=findViewById([Link].drawer_layout);
ActionBarDrawerToggle toggle=new ActionBarDrawerToggle(

this,drawerLayout,toolbar,[Link].navigation_drawer_open,[Link]
ation_drawer_close
);
[Link](toggle);
[Link]();

NavigationView navigationView=findViewById([Link]);
[Link](this);

dashboardFragment=new DashboardFragment();
incomeFragment=new IncomeFragment();
expenseFragment=new ExpenseFragment();
setFragment(dashboardFragment);

mAuth=[Link]();
FirebaseUser mUser=[Link]();
String uid = [Link]();
DatabaseReference mUserInfoDatabase =
[Link]().getReference().child("UserInfo").child(ui
d);
ValueEventListener valueEventListener = new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userEmail =
[Link]("Email").getValue().toString();
TextView email=findViewById([Link].user_email);
[Link](userEmail);
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};

[Link](valueEventListener);

[Link](new
[Link]() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem
item) {
switch ([Link]()){
case [Link]:
setFragment(dashboardFragment);

[Link]([Link].dashboard_color);
return true;

52
case [Link]:
setFragment(incomeFragment);

[Link]([Link].income_color);
return true;

case [Link].income_search:
Intent intent=new
Intent(getApplicationContext(),[Link]);
startActivity(intent);

[Link]([Link].expense_color);
return true;

case [Link]:
setFragment(expenseFragment);

[Link]([Link].expense_color);
return true;

case [Link].expense_search:
Intent intent1=new
Intent(getApplicationContext(),[Link]);
startActivity(intent1);

[Link]([Link].expense_color);
return true;

default:
return false;

}
});

items =new ArrayList<HashMap<String,Object>>();


pm = getPackageManager();
packs = [Link](0);
for (PackageInfo pi : packs)
{
HashMap<String, Object> map = new HashMap<String, Object>();
[Link]("appName", [Link](pm));
[Link]("packageName", [Link]);
[Link](map);
}

private void setFragment(Fragment fragment) {

FragmentTransaction
fragmentTransaction=getSupportFragmentManager().beginTransaction();
[Link]([Link].main_frame,fragment);
[Link]();
}

@Override
public void onBackPressed(){
DrawerLayout drawerLayout=findViewById([Link].drawer_layout);

53
if([Link]([Link])){
[Link]([Link]);
}
else{
[Link]();
}

}
public void displaySelectedListener(int itemId){
Fragment fragment=null;
switch(itemId){
case [Link]:
Intent profile_intent=new
Intent(getApplicationContext(),[Link]);
startActivity(profile_intent);
break;

case [Link]:
fragment=new DashboardFragment();
break;

case [Link]:
fragment=new IncomeFragment();
break;

case [Link].search_income:
Intent intent_inc=new
Intent(getApplicationContext(),[Link]);
startActivity(intent_inc);
break;

case [Link]:
fragment=new ExpenseFragment();
break;

case [Link].search_expense:
Intent intent_exp=new
Intent(getApplicationContext(),[Link]);
startActivity(intent_exp);
break;

case [Link].income_tax_emi:
Intent intent3=new
Intent(getApplicationContext(),inc_emi.class);
startActivity(intent3);
break;

case [Link]:
int d=0;
if([Link]()>=1)
{
int j=0;
for(j=0;j<[Link]();j++){
String AppName = (String)
[Link](j).get("appName");
if([Link]("Calculator"))
{
d=j;
break;
}
}

54
String packageName = (String)
[Link](d).get("packageName");

Intent i =
[Link](packageName);
if (i != null)
{
[Link](getApplicationContext(),"Opening
Calculator..",Toast.LENGTH_SHORT).show();
startActivity(i);
}
else
{
Intent intent=new Intent(Intent.ACTION_VIEW);

[Link]([Link]("[Link]
id=[Link]"));
startActivity(intent);
}
}
else
{
Intent intent1=new Intent(Intent.ACTION_VIEW);

[Link]([Link]("[Link]
id=[Link]"));
startActivity(intent1);
}
break;

case [Link]:
Intent intent2=new
Intent(getApplicationContext(),[Link]);
startActivity(intent2);
break;

case [Link]:
Intent intent4=new
Intent(getApplicationContext(),[Link]);
startActivity(intent4);
break;

case [Link]:
[Link] builder=new
[Link](first_home_page.this);
[Link]("Logout");
[Link]("Do you really want to Logout?");
[Link]("YES", new
[Link]() {
@Override
public void onClick(DialogInterface dialog, int
which) {
finishAffinity();
startActivity(new
Intent(getApplicationContext(),home_screen.class));
}
});
[Link]("NO", new
[Link]() {
@Override
public void onClick(DialogInterface dialog, int

55
which) {
[Link]();
}
});
[Link]();
break;
}
if(fragment!=null){
FragmentTransaction
ft=getSupportFragmentManager().beginTransaction();
[Link]([Link].main_frame,fragment);
[Link]();
}

DrawerLayout drawerLayout=findViewById([Link].drawer_layout);
[Link]([Link]);
}

public boolean onNavigationItemSelected(@NonNull MenuItem item) {


displaySelectedListener([Link]());
return true;
}
}

home_screen.java
package [Link];

import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

56
public class home_screen extends AppCompatActivity {
private EditText mEmail;
private EditText mPass;
private CheckBox remember;

private ProgressDialog mDialog;

private FirebaseAuth mAuth;


@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_home_screen);

mAuth=[Link]();
mDialog=new ProgressDialog(this);

loginDetails();
}

private void loginDetails() {


mEmail = findViewById([Link].email_login);
mPass = findViewById([Link].password_login);
Button btnLogin = findViewById([Link].btn_login);
TextView mforget_password = findViewById([Link].forgot_password);
TextView mSignUpHere = findViewById([Link].signup_reg);
remember=findViewById([Link].checkBox2);

SharedPreferences
preferences=getSharedPreferences("checkbox",MODE_PRIVATE);
String checkbox=[Link]("remember","");
if([Link]("true"))
{
Intent intent=new
Intent(home_screen.this,first_home_page.class);
startActivity(intent);
}
else if(![Link]("false"))
{

[Link](new
[Link]() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if([Link]())
{
SharedPreferences
preferences=getSharedPreferences("checkbox",MODE_PRIVATE);
[Link] editor=[Link]();
[Link]("remember","true");
[Link]();
[Link](home_screen.this,"Remember me
Checked..",Toast.LENGTH_SHORT).show();
}
else if(![Link]())
{
SharedPreferences
preferences=getSharedPreferences("checkbox",MODE_PRIVATE);

57
[Link] editor=[Link]();
[Link]("remember","false");
[Link]();
[Link](home_screen.this,"Remember me
Unchecked..",Toast.LENGTH_SHORT).show();
}
}
});

[Link](new [Link]() {
@Override
public void onClick(View v) {
Intent intent= new
Intent(home_screen.this,[Link]);
startActivity(intent);
}
});

mforget_password.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {
Intent intent= new
Intent(home_screen.this,[Link]);
startActivity(intent);
}
});

[Link](new [Link]() {
@Override
public void onClick(View v) {
String email = [Link]().toString().trim();
String pass = [Link]().toString().trim();
if ([Link](email)) {
[Link]("Email Required..",null);
return;
}
if ([Link](pass)) {
[Link]("Password Required..",null);
return;
}
[Link]("Logging in..");
[Link]();

[Link](email,pass).addOnCompleteListener(new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult>
task) {
if([Link]()){
[Link]();
checkEmailVerification();
}
else
{
[Link]();

[Link](getApplicationContext(),"Login
Failed..",Toast.LENGTH_SHORT).show();
}
}

58
});
}
});

}
private void checkEmailVerification()
{
FirebaseUser firebaseUser=[Link]().getCurrentUser();
Boolean emailflag=[Link]();
if(emailflag)
{
finish();
[Link](getApplicationContext(),"Login
Successful..",Toast.LENGTH_SHORT).show();
startActivity(new
Intent(home_screen.this,first_home_page.class));
}
else
{
[Link](this,"Please verify your
email..",Toast.LENGTH_LONG).show();
[Link]();
}
}
}

inc_emi.java
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class inc_emi extends AppCompatActivity {


TextView t;
Button b1;
Button b2;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);// To Display The Layout from
activy_main resource layout file.
setContentView([Link].activity_inc_emi);
b1 = findViewById([Link].button1);
b2 = findViewById([Link].button2);

ImageView back_arrow=findViewById([Link]);
back_arrow.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {

59
onBackPressed();
}
});

[Link](new [Link]() {
@Override
public void onClick(View view) {
Intent intent= new Intent(inc_emi.this, [Link]);
startActivity(intent); // On clicking on the button,
Income Tax Calculator activity is called
}
});

[Link](new [Link]() {
@Override
public void onClick(View view) {
Intent intent=new Intent(inc_emi.this, [Link]);
startActivity(intent);// On clicking on the button, EMI
activity is called
}
});
}

public void exitApp() {


finish();
}

[Link]
package [Link];

import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class income2 extends AppCompatActivity {

EditText bs;
EditText hra;
EditText sa;
EditText lta;
TextView T1,T2,T3,T4,T5;
TextView tx;
TextView tx1;
Button b1;
Button con;
@Override

60
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_income2);
con=(Button)findViewById([Link]);
bs=findViewById([Link].edit1);
hra=findViewById([Link].edit2);
sa=findViewById([Link].edit3);
lta=findViewById([Link].edit4);
T1=findViewById([Link].t1);
T2=findViewById([Link].t2);
T3=findViewById([Link].t3);
T4=findViewById([Link].t4);
T5=findViewById([Link].t5);

tx1=findViewById([Link].text3);
b1=findViewById([Link]);
[Link](new [Link]() {
@Override
public void onClick(View view) {
calculate();
}
});
[Link](new [Link]() {
@Override
public void onClick(View view) {

try {
int HRA=[Link]([Link]().toString());
int LTAc=[Link]([Link]().toString());
double calcHRA=0.36*HRA;
double calcLTA=0.12*LTAc;

[Link](""+[Link]().toString());
[Link](""+calcHRA);
[Link](""+[Link]().toString());
[Link](""+calcLTA);
[Link](""+50000);
[Link](true);

}
catch (Exception e) {
[Link](getApplicationContext(), "An Error
Occurred, Please try again!", Toast.LENGTH_LONG).show();

}
}
});
}

public void calculate()


{
Intent i=new Intent([Link],[Link]);
[Link]("baseincome",[Link]().toString());
[Link]("HRA",[Link]().toString());
[Link]("SA",[Link]().toString());
[Link]("LTA",[Link]().toString());
startActivity(i);

61
}
}

[Link]
package [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];

public class IncomeFragment extends Fragment {

private FirebaseAuth mAuth;


private DatabaseReference mIncomeDatabase;
private RecyclerView recyclerView;

private TextView incomeTotalSum;

///Update edit text.

private EditText edtAmount;


private EditText edtType;
private EditText edtNote;

//button for update and delete

private Button btnUpdate;


private Button btnDelete;

//Data item value


private String type;
private String note;

62
private int amount;

private String post_key;

public View onCreateView(LayoutInflater inflater, ViewGroup


container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View myview=[Link]([Link].fragment_income,
container, false);
mAuth=[Link]();
FirebaseUser mUser=[Link]();
if(mAuth!=null) {
String uid = [Link]();

mIncomeDatabase =
[Link]().getReference().child("IncomeData").child(
uid);
}

incomeTotalSum=[Link]([Link].income_txt_result);
recyclerView=[Link]([Link].recycler_id_income);
LinearLayoutManager layoutManager=new
LinearLayoutManager(getActivity());

[Link](true);
[Link](true);
[Link](true);
[Link](layoutManager);

[Link](new ValueEventListener() {

int totalvalue=0;

public void onDataChange(@NonNull DataSnapshot dataSnapshot)


{
for(DataSnapshot mysnapshot:[Link]()){
Data data=[Link]([Link]);
totalvalue=totalvalue+[Link]();
String stTotalvalue=[Link](totalvalue);
[Link](stTotalvalue+".00");

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
});

return myview;
}

@Override
public void onStart() {
[Link]();

63
FirebaseRecyclerAdapter<Data,MyViewHolder>adapter= new
FirebaseRecyclerAdapter<Data, MyViewHolder>(

[Link],
[Link].income_recycler_data,
[Link],
mIncomeDatabase
) {
@Override
protected void populateViewHolder(MyViewHolder
myViewHolder,final Data model,final int position) {

[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());

[Link](new
[Link]() {
@Override
public void onClick(View v) {
post_key=getRef(position).getKey();

type=[Link]();
note=[Link]();
amount=[Link]();

updateDataItem();
}
});
}
};
[Link](adapter);
}

public static class MyViewHolder extends [Link]{

View mView;

public MyViewHolder(@NonNull View itemView) {


super(itemView);
mView=itemView;
}

private void setType(String type){


TextView mType=[Link]([Link].type_txt_income);
[Link](type);
}
private void setNote(String note){
TextView mNote=[Link]([Link].note_txt_income);
[Link](note);
}
private void setDate(String date){
TextView mDate=[Link]([Link].date_txt_income);
[Link](date);
}
private void setAmount(int amount){
TextView mAmount=[Link]([Link].amount_txt_income);
String stamount=[Link](amount);
[Link](stamount);

64
}
}

private void updateDataItem()


{
[Link] mydialog=new
[Link](getActivity());
LayoutInflater inflater=[Link](getActivity());
View myview=[Link]([Link].update_data_item,null);
[Link](myview);

edtAmount=[Link]([Link].amount_edt);
edtType=[Link]([Link].type_edt);
edtNote=[Link]([Link].note_edt);

//Set data to edit text..


[Link](type);
[Link]([Link]());

[Link](note);
[Link]([Link]());

[Link]([Link](amount));
[Link]([Link](amount).length());

btnUpdate=[Link]([Link].btn_upd_Update);
btnDelete=[Link]([Link].btnuPD_Delete);

AlertDialog dialog=[Link]();

[Link](new [Link]() {
@Override
public void onClick(View v) {
type=[Link]().toString().trim();
note=[Link]().toString().trim();

String mdAmount=[Link](amount);
mdAmount=[Link]().toString().trim();

int myAmount=[Link](mdAmount);

String mDate= [Link]().format(new


Date());

Data data=new Data(myAmount,type,note,post_key,mDate);

[Link](post_key).setValue(data);

[Link]();
}
});

[Link](new [Link]() {
@Override
public void onClick(View v) {
[Link](post_key).removeValue();

[Link]();
}
});
[Link]();

65
}
}

[Link]
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class MainActivity extends AppCompatActivity {


private static final int SPLASH_TIME_OUT=3200;
ImageView imageView;
TextView textView1,textView2;
Animation top,bottom;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);

getWindow().setFlags([Link].FLAG_FULLSCREEN,WindowMa
[Link].FLAG_FULLSCREEN);

setContentView([Link].activity_main);

imageView=findViewById([Link].spendee_image);
textView1=findViewById([Link].spendee_text1);
textView2=findViewById([Link].spendee_text2);

top=[Link](this,[Link].splash_top);
bottom=[Link](this,[Link].splash_bottom);

66
[Link](top);
[Link](bottom);
[Link](bottom);

new Handler().postDelayed(new Runnable() {


public void run()
{
Intent intent=new
Intent([Link],home_screen.class);
startActivity(intent);
finish();
}
},SPLASH_TIME_OUT);
}
}

[Link]
package [Link];

import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class NextIncome extends AppCompatActivity {


Button go;
EditText e1,e2,e3;
String base,LTA,HRA,SA;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_next_income);
e1=(EditText)findViewById([Link].edit1);
e2=(EditText)findViewById([Link].edit2);
e3=(EditText)findViewById([Link].edit3);
Intent i=getIntent();
base=[Link]("baseincome");
LTA=[Link]("LTA");
HRA=[Link]("HRA");
SA=[Link]("SA");

go=(Button)findViewById([Link]);
[Link](new [Link]() {
@Override
public void onClick(View view) {
finish();
}
});

}
public void finish(){

67
double A=[Link]([Link]().toString());
double B=[Link]([Link]().toString());
double C=[Link]([Link]().toString());
Intent i=new Intent([Link],[Link]);
[Link]("80A",[Link]().toString());
[Link]("base",base);
[Link]("hra",HRA);
[Link]("lta",LTA);
[Link]("sa",SA);
[Link]("80B",[Link]().toString());
[Link]("80C",[Link]().toString());
startActivity(i);

}
}

[Link]
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];

public class Profile extends AppCompatActivity {

private FirebaseAuth mAuth;

68
Button changepass;
Button deleteaccount;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_profile);

mAuth= [Link]();
FirebaseUser mUser=[Link]();
String uid = [Link]();
DatabaseReference mUserInfoDatabase =
[Link]().getReference().child("UserInfo").child(ui
d);
ValueEventListener valueEventListener = new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userEmail =
[Link]("Email").getValue().toString();
TextView email=findViewById([Link].email_profile);
[Link](userEmail);
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};

[Link](valueEventListener);

changepass=findViewById([Link].btn_changepass);
deleteaccount=findViewById([Link].btn_deleteaccount);

[Link](new [Link]() {
@Override
public void onClick(View v) {
Intent intent=new
Intent([Link],change_password.class);
startActivity(intent);
}
});

[Link](new [Link]() {
@Override
public void onClick(View v) {
[Link] dialog=new
[Link]([Link]);
[Link]("Are you sure?");
[Link]("Deleting this account will result in
completely removing your account from Spendee and you will no longer be
able to access this account. " +
"In future if you wish to use the same email
then you need to register again.");
[Link]("DELETE", new
[Link]() {
@Override
public void onClick(DialogInterface dialog, int
which) {
[Link]().addOnCompleteListener(new
OnCompleteListener<Void>() {

69
@Override
public void onComplete(@NonNull Task<Void>
task) {
if([Link]())
{
[Link]([Link],"Account
Deleted Successfully..",Toast.LENGTH_LONG).show();
Intent intent=new
Intent([Link],home_screen.class);

[Link](Intent.FLAG_ACTIVITY_CLEAR_TOP);

[Link](Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
else
{

[Link]([Link],[Link]().getMessage(),[Link]
H_LONG).show();
}
}
});
}
});
[Link]("NO", new
[Link]() {
@Override
public void onClick(DialogInterface dialog, int
which) {
[Link]();
}
});
AlertDialog alertDialog=[Link]();
[Link]();
}
});

ImageView back_arrow=findViewById([Link]);
back_arrow.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}

[Link]
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];

70
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class Registration extends AppCompatActivity {


private EditText mEmail;
private EditText mPass;
private Button btnReg;
private TextView mSignin;

private ProgressDialog mDialog;


private FirebaseAuth mAuth;

private DatabaseReference mUserInfoDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_registration);

mAuth=[Link]();
mDialog=new ProgressDialog(this);

registration();
}
private void registration(){
EditText mName = findViewById([Link].name_reg);
mEmail=findViewById([Link].email_reg);
mPass=findViewById([Link].password_reg);
Button btnReg = findViewById([Link].btn_reg);
TextView mSignin = findViewById([Link].signin_here);

[Link](new [Link]() {
@Override
public void onClick(View v) {
Intent intent= new
Intent([Link],home_screen.class);
startActivity(intent);
}
});

[Link](new [Link](){
@Override
public void onClick(View view) {
String email=[Link]().toString().trim();
String pass=[Link]().toString().trim();
if([Link](email)){

71
[Link]("Email required..",null);
return;
}
if([Link](pass)){
[Link]("Password required..",null);
return;
}
if([Link]()<6)
{
[Link]("Must contain at least 6
characters..",null);
return;
}

[Link]("Processing..");

[Link](email,pass).addOnCompleteListener(n
ew OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult>
task) {
if([Link]()){
[Link]();
sendEmailVerification();
mEmail=findViewById([Link].email_reg);
String
email=[Link]().toString().trim();
FirebaseUser
mUser=[Link]();
if(mAuth!=null) {
String uid = [Link]();
DatabaseReference myRootRef =
[Link]().getReference().child("UserInfo").child(ui
d);
DatabaseReference userNameRef =
[Link]("Email");
[Link](email);
}
}
else {
[Link]();

[Link](getApplicationContext(),"Registration
failed..",Toast.LENGTH_SHORT).show();

}
}

});
}
});
}
private void sendEmailVerification()
{
FirebaseUser firebaseUser=[Link]();
if(firebaseUser!=null)
{

[Link]().addOnCompleteListener(new
OnCompleteListener<Void>() {

72
@Override
public void onComplete(@NonNull Task<Void> task) {
if([Link]())
{
[Link]([Link],"Registration
[Link] mail sent
successfully..",Toast.LENGTH_LONG).show();
[Link]();
finish();
startActivity(new
Intent([Link],home_screen.class));
}
else
{
[Link]([Link],"Error occurred
sending verification mail..",Toast.LENGTH_LONG).show();
}
}
});
}
}
}

[Link]
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];

public class resetpassword extends AppCompatActivity {


private EditText passwordEmail;
private Button resetpassword;
private FirebaseAuth firebaseAuth;

public resetpassword() {
}

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_resetpassword);

passwordEmail=(EditText)findViewById([Link].pass_email);
resetpassword=(Button)findViewById([Link].reset_pass);
firebaseAuth=[Link]();

73
[Link](new [Link]() {
@Override
public void onClick(View v) {
String
useremail=[Link]().toString().trim();

if([Link](""))
{
[Link]("Email Required...",null);
return;
}
else
{

[Link](useremail).addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task)
{
if([Link]())
{
[Link]([Link],"Email
sent successfully..",Toast.LENGTH_LONG).show();
finish();
startActivity(new
Intent([Link],home_screen.class));
}
else
{
[Link]([Link],"Error
sending email..",Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
}
}

[Link]
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

74
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class searchdata extends AppCompatActivity {

private FirebaseAuth mAuth;


DatabaseReference mref;
private ListView listdata;
private AutoCompleteTextView txtSearch;

@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_searchdata);

mAuth=[Link]();
FirebaseUser mUser=[Link]();

if(mAuth!=null)
{String uid = [Link]();
//mref=
[Link]().getReference("IncomeData");
mref =
[Link]().getReference().child("IncomeData").child(
uid);
}

listdata=(ListView)findViewById([Link]);
txtSearch=(AutoCompleteTextView)findViewById([Link]);

ValueEventListener event=new ValueEventListener() {


@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
populateSearch(snapshot);
}

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
};

[Link](event);

ImageView back_arrow=findViewById([Link]);
back_arrow.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {

75
onBackPressed();
}
});

private void populateSearch(DataSnapshot snapshot) {

Log.d("IncomeData","Reading Data");
ArrayList<String> names=new ArrayList<>();

if([Link]()){
for(DataSnapshot ds:[Link]()){
Data data=[Link]([Link]);
String name=[Link]();

//String
name=[Link]([Link]()).child("type").getValue([Link]);

//Data data=[Link]([Link]);
//String name=[Link]();

[Link](name);
}

ArrayAdapter adapter = new ArrayAdapter(this,


[Link].simple_list_item_1,names);

[Link](adapter);

[Link](new
[Link]() {
@Override
public void onItemClick(AdapterView<?> parent, View
view, int position, long id) {
String name=[Link]().toString();
searchType(name);
}
});

}else{
Log.d("IncomeData","No data Found");
}

private void searchType(String name) {

Query query=[Link]("date").equalTo(name);

[Link](new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {

if([Link]()){
ArrayList<String> listtype=new ArrayList<>();
for(DataSnapshot ds:[Link]()){
Data data=[Link]([Link]);
//[Link]([Link]());
String
strIncome=[Link]([Link]());

76
[Link](strIncome+"\n"+[Link]()+"\
n"+[Link]()+"\n"+[Link]());
}

ArrayAdapter adapter=new
ArrayAdapter(getApplicationContext(),
[Link].simple_list_item_1,listtype);
[Link](adapter);

}else{
Log.d("IncomeData","No data found");
}

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
});

[Link]
package [Link];

import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class searchdata2 extends AppCompatActivity {


private FirebaseAuth mAuth;
DatabaseReference mref;

77
private ListView listdata;
private AutoCompleteTextView txtSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_searchdata);

mAuth=[Link]();
FirebaseUser mUser=[Link]();

if(mAuth!=null)
{String uid = [Link]();
//mref=
[Link]().getReference("IncomeData");
mref =
[Link]().getReference().child("ExpenseData").child
(uid);
}

listdata=(ListView)findViewById([Link]);
txtSearch=(AutoCompleteTextView)findViewById([Link]);

ValueEventListener event=new ValueEventListener() {


@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
populateSearch(snapshot);
}

@Override
public void onCancelled(@NonNull DatabaseError error) {

}
};

[Link](event);

ImageView back_arrow=findViewById([Link]);
back_arrow.setOnClickListener(new [Link]() {
@Override
public void onClick(View v) {
onBackPressed();
}
});

private void populateSearch(DataSnapshot snapshot) {

Log.d("ExpenseData","Reading Data");
ArrayList<String> names=new ArrayList<>();

if([Link]()){
for(DataSnapshot ds:[Link]()){
Data data=[Link]([Link]);
String name=[Link]();

//String
name=[Link]([Link]()).child("type").getValue([Link]);

78
//Data data=[Link]([Link]);
//String name=[Link]();

[Link](name);
}

ArrayAdapter adapter = new ArrayAdapter(this,


[Link].simple_list_item_1,names);

[Link](adapter);

[Link](new
[Link]() {
@Override
public void onItemClick(AdapterView<?> parent, View
view, int position, long id) {
String name=[Link]().toString();
searchType(name);
}
});

}else{
Log.d("ExpenseData","No data Found");
}

private void searchType(String name) {

Query query=[Link]("date").equalTo(name);

[Link](new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {

if([Link]()){
ArrayList<String> listtype=new ArrayList<>();
for(DataSnapshot ds:[Link]()){
Data data=[Link]([Link]);
//[Link]([Link]());
String
strIncome=[Link]([Link]());
[Link](strIncome+"\n"+[Link]()+"\
n"+[Link]()+"\n"+[Link]());
}

ArrayAdapter adapter=new
ArrayAdapter(getApplicationContext(),
[Link].simple_list_item_1,listtype);
[Link](adapter);

}else{
Log.d("ExpenseData","No data found");
}

@Override
public void onCancelled(@NonNull DatabaseError error) {

79
});

Appendix B: Hardware Schematics

Below screenshots are the actual result of the about test description.

80
81
82
83
84
85
Appendix C: List of
Components

Development Environment

 System Software: Android Studio


 Programming language: Java
 Database: Firebase Realtime Database

Operational Environment

 RAM: 1GB or more


 ROM: 4GB or more
 Processor: 1GHz Dual Core or higher
 Android Version: 4.0 or higher
 Internet Connectivity: Required

Features

Major Features

 Income Data (Insert/ Update/ Delete)


 Expense Data (Insert/ Update/ Delete)
 Statistical View of Expenses per Day
 Search Data by Date
 Income Tax and EMI Calculator
 Simple Calculator

Other Features

 Login
 Registration
 Forgot Password
 Email Verification
 Low Balance Alert
 Rate Us
 Change Password
 Delete Account Permanently
 Logout

86
87

You might also like