Budget Tracker App for Personal Finance
Budget Tracker App for Personal Finance
By
Wishma Hassan 2020-GCUF-095407
Aftab Kaleem 2020-GCUF-095366
Jahanzaib Fazal 2020-GCUF-095403
BACHOLAR OF SCIENCE
IN
COMPUTER SCIENCE
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.
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.
3
DEDICATED
TO
&
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.
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
2 Requirements Specification
2.1 Non-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
6
3.6 System Sequence Modeling
4 Project Design
4.1 Methodology
4.3.1 Module 1
4.3.2 Module 2
4.3.3 Module 3
5 Implementation
5.1 Development Stages
6 Testing
6.1 Unit Testing
6.3 Results
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.
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.
9
2. Requirements Specification
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.
10
2.1.1 Product Requirements:
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.
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.
It should support multiple languages and currencies to cater to users from diverse
geographical regions.
11
2.2 Functional Requirements
User Registration and Authentication: Users can register and log in securely.
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.
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
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:
14
3.5 Flow of System:
15
4. Project Design
4.1 Methodology:
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.
16
The design description outlines the high-level architecture
and design considerations for the Budget Tracker App.
4.4.1 Module 1:
4.4.2 Module 2:
4.4.3 Module 3:
17
5. Implementation
18
visualizations such as charts and graphs to help users understand their financial data at a
glance.
19
6. 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
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.
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
24
[Link]
[8] Venmo: Payment app for splitting the cost of a pizza with friends
[Link]
25
Appendix
[Link]
package [Link];
//import [Link];
public Data(int amount, String type, String note, String id, String
date)
{
[Link] = amount;
[Link] = type;
[Link] = note;
[Link] = id;
[Link] = date;
}
26
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
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];
@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
{
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];
BarChart barChart;
BarData barData;
BarDataSet barDataSet;
ArrayList barEntries;
final String[] date=new String[10000000];
//recycler view
@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) {
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);
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) {
}
});
[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
[Link](true);
[Link](true);
[Link](true);
[Link](layoutManagerIncome);
[Link](true);
[Link](true);
[Link](true);
[Link](layoutManagerExpense);
return myview;
}
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;
}
});
fab_expense_btn.setOnClickListener(new [Link](){
@Override
public void onClick(View v) {
expenseDataInsert();
}
});
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);
View mIncomeView;
39
}
}
View mExpenseView;
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);
//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];
Button emiCalcBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_emi);
emiCalcBtn = findViewById([Link].btn_calculate2);
[Link](new [Link]() {
@Override
public void onClick(View v) {
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 D = calDivider(Dvdnt);
[Link]([Link](emi));
[Link]([Link](ti));
}
});
}
return (p);
return (i/12/100);
return (y * 12);
42
public float calDvdnt(float Rate, float Months) {
return (Dvdnt-1);
return (FD/D);
return (emi*Months);
}
}
[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];
@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;
@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);
}
View mView;
edtAmount = [Link]([Link].amount_edt);
edtType = [Link]([Link].type_edt);
edtNote = [Link]([Link].note_edt);
[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();
[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];
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) {
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];
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];
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;
}
});
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]);
}
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;
mAuth=[Link]();
mDialog=new ProgressDialog(this);
loginDetails();
}
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](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];
@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
}
});
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
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();
}
}
});
}
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];
62
private int amount;
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;
@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);
}
View mView;
64
}
}
edtAmount=[Link]([Link].amount_edt);
edtType=[Link]([Link].type_edt);
edtNote=[Link]([Link].note_edt);
[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);
[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];
@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);
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
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];
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];
@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 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];
@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]);
@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();
}
});
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);
}
[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");
}
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];
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]);
@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();
}
});
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);
}
[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");
}
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
});
Below screenshots are the actual result of the about test description.
80
81
82
83
84
85
Appendix C: List of
Components
Development Environment
Operational Environment
Features
Major Features
Other Features
Login
Registration
Forgot Password
Email Verification
Low Balance Alert
Rate Us
Change Password
Delete Account Permanently
Logout
86
87