Professional Documents
Culture Documents
Gypsygo_ an Android Application for Travel Assistance, Lodging & Dining Reservations
Gypsygo_ an Android Application for Travel Assistance, Lodging & Dining Reservations
Gypsygo_ an Android Application for Travel Assistance, Lodging & Dining Reservations
A Capstone Presented to
The Faculty of the Department of Information Technology
Bulacan State University – Meneses Campus
Matungao, Bulakan, Bulacan
In Partial Fulfillment
of the Requirements for the Degree
Bachelor of Science in Information Technology
Month Year
December, 2023
Republic of the Philippines
BULACAN STATE UNIVERSITY
Matungao, Bulakan, Bulacan
MENESES CAMPUS
APPROVAL SHEET
i
BULACAN STATE UNIVERSITY MENESES CAMPUS
Republic of the Philippines
BULACAN STATE UNIVERSITY
Matungao, Bulakan, Bulacan
MENESES CAMPUS
CERTIFICATE OF EDITING
prepared by
December, 2023
Date
MENESES CAMPUS
DECLARATION OF ORIGINALITY
We certify that this thesis is the product of our work and that we have acknowledged all
the sources used in its preparation. We understand what plagiarism is all about, and we are aware
of the policy of the University pertaining to plagiarism (as stipulated in the Student Conduct and
Discipline section of the Student Handbook).
We also certify that the manuscript has been subjected to plagiarism scan/test through an
anti-plagiarism software. We are attaching a copy of the originality report in the Appendices
section.
Authors/Developers
Travel applications can assist travellers in easy access bookings during their trip. Give Hotel
and restaurant information management and handle reservations. They are possibly increasing
the portability of the system. They can also browse the local locations here in Bulacan using
Google Map integration for location-based service to find the best hotel they like and the best
restaurant according to their taste and make a reservation. This application helps tourists and the
owners of hotels and restaurants to communicate with each other regarding their reservations and
other inquiries with no hassle and less stress for the client and the owner. The system also collects
travellers' valid IDs to avoid fake identities and fake bookings during the process. The hotel or
restaurant owner also needs valid IDS like BIR, DTI, and TIN IDS for the safety of the business.
The system works properly, is efficient for tourists and the owners of hotels and restaurants, and
is user-friendly. The system has been developed using the Agile methodology, and the formula
was implemented based on the size of the study population, the desired level of precision, and
the allowable margin of error, which has also been utilized in the language, implementation
strategy, and software end-user satisfaction. A survey was conducted among 100 travellers, hotel
and restaurant managers, and staff to indicate that travel applications are practical for travellers
here in Bulacan. GypsyGo is efficient with a minimum knowledge requirement and learning
We, the developers, thank the Almighty God for His enduring grace, guidance, and
The researchers would also like to express their sincerest gratitude to their adviser, Mr.
Michael John D. Mabanta, MSIT, for his continuous support in their capstone and his patience,
motivation, and immense knowledge. His guidance helped them throughout their capstone and
Special gratitude to the Hotel and Restaurant owners and staff who gave their time and
The developers would also like to express their appreciation to their Capstone
coordinator, Mrs. Sheryl D. Ellamil, MIT, for her trust, advice, support, patience, and guidance
To their parents, who have continuously supported them financially to accomplish this
study, and for their guidance, encouragement, and inspiration throughout their capstone project,
an exceptional thanks for the parental presence and constant advice to them.
They would also like to thank their classmates and friends for the stimulating discussions,
the sleepless nights they spent working together to meet deadlines, and all the fun they have had
AAISL
MKAM
MLGG
RDGC
Approval Sheet........................................................................................................... i
Certificate of Editing.................................................................................................. ii
Abstract ...................................................................................................................... iv
Acknowledgements .................................................................................................... v
Dedication .................................................................................................................. vi
Introduction ....................................................................................................
Related Literature........................................................................................... 9
Related Studies............................................................................................... 13
Synthesis ........................................................................................................ 17
Definition of Terms........................................................................................ 20
Research Instrument....................................................................................... 25
Summary ........................................................................................................ 68
Conclusions .................................................................................................... 72
Recommendations .......................................................................................... 74
APPENDICES .......................................................................................................... 80
LIST OF TABLES
LIST OF FIGURES
Figure 2.1 Conceptual Framework ............................................................................ 19
Introduction
Digital technology has altered the way individuals plan, book, and enjoy their
journeys (Sigala, 2020). The use of smartphone applications, which give travelers
actual and straightforward accessibility to data, services, and suggestions, ranks as one
of the most promising digital tourism innovations. (Buhalis & Amaranggana, 2015). In
grown to be an essential element of the travel sector, offering tourists a broad spectrum
transportation, and activities. Due to the rising need for travel applications, businesses
that concentrate on travel technology have appeared. These companies have developed
innovative approaches to improve the user experience for both travellers and service
providers (Bilgihan & Bujisic, 2015). One of the most crucial ways of distributing hotel
mobile travel applications' user interfaces. Further investigation can focus on user
interface (UI) design approaches that make it simple for users to navigate through a
lodging and dining reservations, maps, including methods of payment, all inside a
single application. This can increase consumers' journey scheduling and reservation
productivity and comfort. (Xiang, Du, Ma, & Fan., 2017). Yet even with the increase
and travellers' fluctuating demands and preferences. The COVID-19 pandemic has
severely impacted the tourism industry, as practically all nations, including the
the virus from spreading, rigorous quarantine precautions were implemented. The
abrupt halt in growth in demand for travel and activities associated with tourism brought
list of hotel and restaurant options with booking capabilities can help promote tourism
and ensure a more comfortable and pleasurable journey for tourists. The developed
application has three user interfaces for the travellers/customers, each one for the hotel
and restaurant's information management. Users of the traveller interface are able to
access relevant information about tourist attractions and hotel and restaurant options,
capable of booking hotel rooms and restaurant tables/events and receive updates
regarding their reservations. The hotel and restaurant management interface will enable
managers to handle their room listings and availability, answer client questions, and
track performance.
friendliness, and information quality, have been conducted, more research is still
required to understand these applications' development and design fully. This study
entails considering the needs and preferences of tourists and the application's technical
capabilities and constraints. Thorough research is also required to assess the efficiency
and performance of travel applications regarding how they affect user fulfilment.
of applications is one of the critical issues. Given these facts, visitors significantly rely
and as a result, passengers risk having a bad experience. The outcomes of this project
also guide future studies about how travellers use online mobile applications and
contribute to establishing best practices in this area. Gypsy Go was developed to give
restaurants, and cafés. User feedback will be gathered and analyzed throughout the
application. These responses will enhance the application's functionality and recognize
2. What are the essential features the application must provide to hotels and
3. How will the system be evaluated based on the evaluation criteria of ISO
3.2.Performance Efficiency
3.3.Compatibility
3.4. Usability
3.6. Maintainability
3.7. Security
3.8. Portability
The significance of this project stems from its ability to improve the efficiency
mobile platform for discovering tourist destinations, a place to stay and dine that allows
capacity to develop and design mobile applications. The developers will build expertise
in getting user feedback, doing usability testing, and implementing it into the design
and functionalities of the application. This project will be a great asset to the developers'
portfolio, and that might open the doors to additional initiatives and partnerships.
Future researchers. This project may also add to the tourism and travel
application development information. This project can give perspectives on the design
and development of future travel apps by observing the elements that determine the
Hotel and restaurant managers. The system offers them a more extensive
reach among potential customers by providing features that thoroughly showcase their
establishments' information. This study would boost their visibility and reservations,
areas, such as hotels, restaurants, and souvenir stores. By promoting tourists in the
locality, the application can enhance local businesses' prominence and profitability,
promotion and development of tourism in their local regions may find use for the
operations to fit the demands and preferences of tourists, hence contributing to a better
tourism experience in their areas by recognizing the factors that impact tourist
satisfaction.
Travelers. The project's outcomes may assist travelers in preparing for a trip by
presenting them with a practical and user-friendly travel app. The app can help tourists
traverse, locate local sights, and learn about available hotels and restaurants.
This system was designed for users under the category of "traveler," "hotel,"
and "restaurant" managers using Android devices who have an internet connection.
This system is intended to be used locally in Bulacan, but its initial focus is on tourist
destinations in the local tourist spots of the province of Bulacan. The development of
the Gypsy Go took place from January 2023 to December 2023. The system includes
various features and functionalities, including User authentication: Users can create
accounts using their email address, name, and password. Tourist attraction information:
including images, descriptions, and directions through Google Maps. Hotel and
restaurant information: The application includes detailed information about hotels and
can easily book hotels and restaurants through the application. Chat system: Travelers
can communicate with hotel and restaurant staff through the application's chat system.
Profile management: Travelers can manage their profile information, including their
profile picture and booking history. The development of the travel application
designing and testing the application with users to ensure it met their needs and
expectations. The host user can list their business inside the system and upload it to the
traveler interface, with the capability to receive updates and real-time communication
The travel application is currently available for Android devices with minimum
compatibility with API 27 and maximum compatibility with API 33. Furthermore, the
of data available for tourist attractions, hotels, and restaurants limits the application's
effectiveness. The application relies solely on Google Maps for navigation. The
the theories related to our project, guiding our application's development along with its
main features. This chapter is broken down into different sections covering relevant
ideas, related studies, related literature, synthesis, and conceptual framework. Each part
seeks to deliver thoughtful observation and understanding of the topic and point out the
gaps in the existing literature and studies the project aims to fill.
Relevant theories
User Experience (UX). A framework for planning and assessing the way users
interact with the application. The developers designed and developed an application
that allows users to browse information about travel destinations and locate and reserve
lodgings and dining options over their phones. The primary goal is to offer users a
pleasant, simple to use, and understandable are all part of the UX design concepts,
time when they feel at ease and secure by using the application. To ensure that
customers can schedule reservations without difficulties, the application must be simple
to operate and comprehend. In accordance with the theory, effective UX design may
boost user engagement since satisfied users are much more inclined to use the
application again. Therefore, to enhance the user experience with our application, one
of the many things we must prioritize in developing the application is the UX design.
Technology Acceptance Model (TAM). It is a generally recognized theory in
the field of tech innovation that focuses on clarifying how consumers embrace
technology. The TAM claims that apparent usability and accessibility are significant
components when assessing user acceptance along with their technological adoption.
The perceived value and usability of a travel application can be critical factors in
determining how widely travelers use it. Users have a greater tendency to embrace and
utilize a mobile application if they find it beneficial and straightforward to use, which
can eventually lead to the app's success. Designers can grow accustomed to the
application to users' demands by being mindful of the factors that affect user
By this theory, TAM can be especially beneficial for gaining insight and
bringing awareness into how users assess the worth of the great functionality and
simplicity of a travel application. Whereas if the application gives accurate and up-to-
date information on tourist attractions, hotels, and restaurants, the users of tourists will
be more inclined to consider the app as handy. Hotel and restaurant managers who are
going to utilize the hotel and restaurant management interface could have varying
expectancy for the host interface can be analyzed based on its capacity to offer
necessary information on bookings with clarity and simplicity. By taking into account
the necessities and requirements of the hotel and restaurant, the developers prioritized
improving the performance expectancy and usability of the host management interface
products. In the matter of our travel application, this implies that customers are more
inclined to engage with it if they believe it is beneficial. The theory suggests that
application and that they will solely make use of it when these expectations are fulfilled.
The concept of the Expectancy-Value Theory may be adapted towards the travel app
by ensuring the application is simple to operate and delivers the conveniences that
consumers seek. The application should be developed with the user's needs prioritized,
providing easy navigation and order to get accurate results of essential information like
hotel and restaurant reservations and tourist destination guides. The app is more likely
Related Literature
In this subsection, the developers analyze related pieces of literature that address
the ideas and factors associated with travel applications, explicitly studying the
technology in travel applications, and the impact that social media has on the travel
planning process. The developers are hoping to acquire a better knowledge of the
components that impact the performance of travel applications and their potential to be
enhanced to fit the demands of modern travelers by studying these concepts and
variables.
Local literature:
2021) developed the Isabella travel app in order to assist the Provincial Tourism Office
destinations and enable visitors to pinpoint various tourist destinations inside the area
utilizing their smartphones. The researchers came up with the concept to develop a
portable tourist application. The researchers developed the idea to build an android
suitable place quickly. The only thing the travelers can do through the application is
browse the province's tourist destinations because the platform is restricted to Isabela.
The application features tourism information for both nature and man-made
museums, shopping centres, and department stores. The application additionally offers
details on the municipality's profile and a route selection planner to help users choose
the most efficient path from their present location to the target destination.
Another study about travel assistance (Vicente M Jr & Cecil G, 2019) goal to
ascertain the connection between user satisfaction and usability among DOT in their
in Cebu City using ICT to foresee user behavior. The primary responses as of 2017
were from Cebu City's authorized travel agencies. Using the Davis Technological
Acceptance Model (TAM), respondents believed that ICT was helpful for completing
tasks efficiently, increasing efficiency and productivity, and was simple to operate and
engage with. Respondents are more inclined to utilize technology at work for marketing
and sales purposes and to advocate for it to others in the business world. However, there
is not any correlation between effectiveness to the user (PEOU) and simplicity of use
(PEOU) in the desire to utilize. As a result, the respondents' adoption of ICT may or
The study about online reservations, trust in e-commerce acceptance and use in
the Philippines (Capistrano PhD, 2021), the study seeks to add to the topic by utilizing
analyzing data from 399 consumers who use online food delivery and tourism online
reservations. The study found that trust enormously adds to these customers' views of
applications and websites through a series of statistical analyses. Yet, only some of
The provides both theoretical and practical possibilities for enhancing the strengths and
solving the problems of these specific mobile applications and websites. There is also
Foreign literature:
developed and assessed the functionality of a proposed smartphone application for the
developed by tourists, a poll with 53 participants was done. After that, functionality
framework was employed in order to check the app's interface's usefulness and make
sure it satisfies user needs. In this study, three key functionality measures were used:
smartphone application for tourism in Egypt, this research strengthens the existing
for the tourism ministry, software companies, mobile application developers, and, of
users' loyalty to mobile hotel booking by (AB Ozturk et al.), mobile hotel booking
(MHB) become an important distribution channel for hotels and online travel agencies
and so far for them Understanding MHB users' loyalty intentions toward this
technology have become equally important for MHB service providers. Therefore, the
online distribution of services, including hotel rooms, flights, attraction tickets, cruises,
and car rentals, has been on the rise due to the benefits that both travelers and companies
have gotten. Therefore, for the researchers, adopting an effective e-commerce strategy
is a crucial matter for the lodging industry because more consumers use their mobile
devices to shop online. According to the researchers, more than 70% of people reported
owning a smartphone in the U.S. According to them, nine out of ten smartphone users
use their devices daily for their scope for this study is their offering hotel information
such as location, facilities and entities and also travelers can books their room on one
go as for their delimitations is they do not have reservations for restaurants. There needs
Furthermore, they do not have tourist attractions, and the result of this study is that This
study further analyzed the influence of self-efficacy on PEOU and the impact of PEOU
on convenience. The study results are related to H1. Their instrument for this study is
According to the study about mobile hotel booking (J. Wu, 2018) the business
world entered into a new era with the rapid progress also according to him now a days
consumer utilized i.t to search, identity and purchased tourism product/services and
supplies in the internet and according to him online sale over the world has been
increase and continuously growing in recent years and the total worldwide of the online
more's travelers are finding travel information and making travel reservation through
various online channels including website from computer or laptops and also on mobile
devices and also for him the bringing of mobile tourism added benefits of enhancement
flexibility and mobility and as for his study the dramatic grown of mobile travel
bookings does not necessarily mean that m-booker will surpass the d- booker and as for
him most of the online travel reservations are still made through computers website and
as for him the rate of mobile booking is over 50% and this number will predicted to
continue increase as for him in spite of the rapidly growing online travel sales in chins
the Chinese e-tourism market cannot be regard as healthy also in this study they talked
about the impact of perceived value in satisfaction but the construct value merely
measures the value of money it has also been argued that this matter not should be
measured just from the price but also from the perspective of value of time. As for the
scope of this study, they allow the supplier to have its presence on their customers'
mobile devices while automatically keeping their customers information on the app.
Also, they focus on a mobile app rather than a mobile website, and they have hotel
bookings via mobile. The app's delimitation is they only focus on the satisfaction of
customers for their hotel booking. They do not offer any tourist spots or restaurant
experimentation, and also, for the result of this study, all of the objectives of this study
were achieved.
Related Studies
In this subsection, existing related studies that have delved into various areas of
travel and booking applications will be analyzed. The studies have investigated user
habits and preferences, including the effectiveness of features and functionalities and
studies, the developers want to acquire insights into the strengths and limitations of the
existing travel and booking applications and contribute to the development of more
SMS (Short Message Service) notification using iTexMo API, which has plans for
creating a smartphone application that will simplify the booking and reservation
process among hotel management and hotel guests. The researchers claimed that the
current reservation and booking system could be more efficient in meeting customer
wants and increasing the revenue of the hotels by bringing in a large number of visitors.
The hotel industry is in need of a powerful tool to reach a large audience and give their
developing a smartphone application that will simplify the process of hotel bookings.
Their goal is to give hotel bookers a platform wherein they can quickly, accurately, and
technology. The application will be used by users who want to plan and reserve their
hotel stays in advance. The solution enables the hotel to increase revenue while also
enhancing the whole experience of its visitors. The researchers concluded that the
manual technique could be more effective and convenient for both the hotel customers
and the hotel employees after carrying out an extensive study and analysis. The study's
bookings through a mobile application in order to address the issues with the manual
technique. The study's findings demonstrated that the smartphone app satisfied the
needs and demands of the respondents. Most of them have recognized the application's
individuals in the hotel sector and their clients. Hotel bookings will be made simple,
quick, and convenient for visitors by the designed application. The use of the
application will increase the amounts of guests the hotel can serve and host each day.
The developed project will boost the hotel's revenue while also enhancing the quality
On the contrary, another study about travel assistance (Shin-Yi et al., 2020), a
TAM (Technology Acceptance Model) Framework, has been conducted with another
study we have gathered that aims to analyze the impact of mobile phones in the tourism
industry. The study has some valuable insights. However, it also retains some
restrictions. The subjects of the investigation are Taiwanese FITs between the ages of
eighteen (18) to sixty-five (65) who have utilized mobile APPs to pick travel
information for their most recent vacation. At Taiwan Taoyuan International Airport
between December 2012 and March 2013, surveys were handed out as a component of
Chinese was created using Taiwanese FITs as the primary demographic. Travellers who
stated they were not carrying a phone were not taken into account in the research since
the survey's central emphasis was on phone users, specifically individuals who have
utilized their devices to seek out knowledge on the latest visit overseas. For the analysis
of the data in this research, researchers used SPSS and AMOS. They used structural
equation modelling (SEM) to evaluate the model, test research hypotheses, and
investigate the causal connection between the model's components. The sampling
methods used in the study, which only surveyed Taiwanese FITS (Foreign et al.), could
compromise the reliability of the findings. The outcome might not be generalizable as
reluctance to use their smartphones due to the poor internet and Wi-Fi service abroad.
Moreover, only smartphone research was done for this study. As a result, the
popular paid software in Apple's App Store is a navigation system for tourists; the
application is almost twice as expensive as the one that comes in at number two, a
business app. Future studies should examine any potential problems with applications
that affect the price of tourism. Taiwanese citizens can already utilize the majority of
smartphone travel applications for internal travel; however, there are few Mandarin-
language travel apps available for usage abroad. As a result, Taiwanese FITs do not
frequently utilize those APPs, which makes the study of these researchers' study more
challenging.
evaluated two applications: the VoirginHotel.com app and the StayConnected.com app,
which mainly focused on the mobile application for hotel reservations. The app Lucy
from Virgin Hotels assists with requests for services and amenities, serves as the
temperature in the room, streams private material, and more. The ExtendedStay app
experts evaluated the usability of the m-commerce apps. Each assessor examined the
been conducted in a study to identify the characteristics that the usability heuristics for
specific applications should have. The assessors developed a set of heuristics for mobile
apps for hotel booking, but the 13 usability heuristics recommended by the study had
many usability violations. The assessors tested the usability of the Virgin Hotels, Lucy,
showed a blank screen during the onboarding process, the Lucy app does not display
dots or anything similar to let users know how many slides or pictures are in the gallery,
A study examining the causes and outcomes of a mobile application (Tian et al.,
2021) contradicts the previous research discussed, as the researcher claims that it adds
to the body of knowledge on user engagement, although it has limits. To begin with,
despite the fact that it may not be entirely accurate, we considered "buy intention" to
can be used to make sure that our findings reflect actual customer behaviour.
Furthermore, we largely disregard the impact of personality traits and social influence
on the engagement of mobile travel apps in this article and instead concentrate on the
app's features. The proposed model can eventually include personality elements (like
consumer ingenuity or personal qualities) and social influences (like referrals from
friends).
factors may influence the causes and effects of using mobile travel apps. The
proponents are curious to know if our findings apply to people from various cultural
backgrounds. To generalize our findings, a further study utilizing random samples from
Synthesis
In this section examines various studies on mobile technology in the travel and
tourist industry. This study aims to offer perspective on the usage of mobile technology
related study the developers have explicitly analyzed contends that regardless of
whether an application is simple to use, its capacity to affect users' views about its
mobile applications must offer users a highly efficient yet simple-to-use interface that
Users have a greater chance to adopt a favourable view of the application and
increase their regularity of usage if this is done. On the other hand, the system
tourist and hotel restaurant managers, and real-time updates. Through this approach,
the developers ensure that the system stands out from the competition and draws in a
sizable user base since people are more inclined to favour an application that offers
referenced do not come with two user interfaces or levels of access. The system offers
a more specialized and effective user experience for each group by having separate
interfaces for travellers and host management. This may raise excellent user experience,
Adding to the argument, unlike many studies that merely focus exclusively on hotel
such as the lists of travel destinations, lodging, and dining establishments that accept
reservations through the application and lets the host users (hotel and restaurant)
manage and upload their information, get in touch with the guests, and customers via
based service and accepts reservations. The presence of a location-based service may
significantly enhance user satisfaction and simplify the process for travellers to
Conceptual Framework
aspects that help lead the development of an Agile application through a structured
maintenance are every framework component. The agile approach was used in the
Process
Output
Input
GypsyGO
Figure 2.1 This figure shows the conceptual framework of the system
the programming language (Java), user preferences, project plan, and software
requirements: for designing (Adobe XD), Android studio, and for the Database
The second part outlines the development of the system as adhering to the
modern UX design standards, evaluating the source materials, and recognizing the gaps
that need more research and their limitations. In the development of the system, the
Agile Methodology was implemented. Finally, the developed system meets the needs
Definition of terms
Functionality. The specific features allow the application to carry out particular
functions and provide certain services, including the system's ability to provide travel
assistance by listing the local attractions, making reservations and payment processes,
Host. Hotel and restaurant managers who are registered as business managers
on the application.
Operating system. It is the software that controls the software and hardware
assets of the devices that execute the travel application. It provides the resources and
services required for the travel application to perform successfully, such as memory
provides real-time data storage and synchronization over different devices. Firebase's
real-time database allows the application to store and retrieve real-time data, including
User Interface (UI). Refers to the application's graphics and design. It includes
the buttons in the application, the data entry fields, iconography, all of the images, and
METHODS OF RESEARCH
study's methodology. The subsections under this chapter describe different facets of the
research process. The subsections of this chapter cover the following: methods and
techniques of the study, population and sample of the study, sampling design, research
instrument, data collection process, ethical consideration, and finally, data analysis.
travel applications, including their preferences for its services, user interfaces, and user
satisfaction. Descriptive design was selected to serve as the initial phase of the study
since it enabled the collection of thorough knowledge through interviewing the chosen
hotels and restaurants regarding their current reservation process and their preferences
for an application that caters to their needs. The data gathered from the interview was
process to establish a practical travel application for assistance, lodging, and dining
reservations that adapt to the preferences of travellers, hotel managers, and restaurant
managers. This project used the Agile Methodology, which permitted incremental and
technique allowed the developers to promptly recognize and fix problems, leading to
an effective procedure for the development of the system that resulted in a functional
initially, the developers interviewed the hotel and restaurant managers to understand
the current ways of the reservation process online and to understand which functions
and features help them to showcase their business online. Then, a quantitative approach
was applied with the Likert Scale to acquire data regarding the level of satisfaction of
the travellers, hotel, and restaurant managers with the system based on the ISO.
Agile Method
The agile approach was implemented for the development of the system. This
each task for a flexible development flow. The feedback from the system stakeholders
will be used for further improvement throughout the process, guaranteeing that the
entails identifying the scope of the system, the calculation of the timescale
1.5 Deployment – This is the stage at which the system is launched and made
available to users.
1.6 Review – Lastly, the stage applies to analyzing the results of the
Sampling Design
population representation.
sampling design is to guarantee that the information acquired is in accordance with the
criteria and that the data gathered is relevant to the project. This method involves
selecting the respondents based on the shared traits and characteristics between the
population that the developers believe to be relevant for the project, which are the
individuals who manage hotels and restaurants, as well as those who use travel apps in
The participants in this project are the locals consisting of Travelers, Hotel
managers, and Restaurant Managers in selected places in Bulacan. The respondents had
the developers. Their participation in this project was the basis that determined the
Travelers 88 88%
Hotel Managers 8 8%
Restaurant Managers 4 4%
representative of the specific traits sought in the population, the developers carefully
selected particular individuals that fall under the category of Travelers, Hotel managers
these specific individuals, the developers hoped to obtain knowledge that could be
Research Instrument
Survey. One of the two research instruments used for this study was a self-made
questionnaire aligned with the objectives of the project. Three phases comprise the
survey's structure. The first section collects information on the respondents' names
(optional), ages, and the category they fall under (traveller, hotel, restaurant). The
second section provides them with an overview of the system for better understanding.
The last part of the survey examines respondents' degree of satisfaction with the
application, map navigation, reservation process, and hotel and restaurant features. The
feedback and suggestions from the respondents are gathered in the last part for further
application improvement.
providers directly, which was used throughout the development of the system to
comprehend further how to meet their specifications for efficient integration of the
companies they represent into the application. The features and capabilities of the
application may then be improved to satisfy the requirements of the hospitality sector
better, resulting in higher utilization and contentment among travelers, hotels, and
restaurants.
The developers wrote letters to formally and legally bind requests from their
Capstone adviser and Capstone coordinator to validate their research instrument for the
involving hotel managers and restaurant managers was approved and signed by their
individuals who fall under the traveller category as well as hotel managers and
restaurant managers.
The survey questionnaire was generated with Google Forms and distributed to
the intended respondents online. The questionnaire was accessible to responders for
two weeks, when they may access it and complete it at their own pace. The developers
showed the letter signed by their thesis adviser to the ones participating for legal
consent and waited for the respondent's most available time to perform the interview.
to-face interview to record the entire interview for transcribing the conversation later.
Lastly, the developers gave thanks to them and ensured that the data gathered was
Ethical Consideration
The privacy and security of the respondents remained protected during the
Informed Consent. Before getting involved with the study, respondents were
given a thorough overview of the study's objective. This includes discussing the kind
of information that would be gathered and how their data would be utilized throughout
the study.
Confidentiality and Anonymity. The respondents were made aware that the
or contact information, was gathered. All data remained fully protected, and only the
involvement was voluntary and that they could withdraw from participating at any
moment.
Data Analysis
The statistical tool enabled a more thorough analysis of the results, which took
into account the level of satisfaction and dissatisfaction of the respondents and gave a
analyzed statistically using the weighted mean. A widely used evaluation technique that
enables participants to express how strongly they agree or disagree using the Likert
scale. A variant of the standard compromise known as the "weighted mean" considers
the weights given for every response type on the Likert scale. In this study, the formula
Formula: X = Fx/N
F is the frequency
The quantitative response was analyzed with the applied statistics. Applied
statistics was used to manage, analyze, interpret, and draw conclusions from data and
assistance, lodging, and dining reservations was assessed based on its effectiveness and
Numeric ratings were acquired implementing the Likert's Scale, with the following
interpretation of the ranking ranges: "Strongly Agree" for rankings between 4. 60 and
5.00, "Agree" for rankings between 3. 70 and 4.30, "Neutral" for rankings between 2.
70 and 3.50, "Disagree" for rankings between 1. 80 and 2.70, finally, "Strongly
Table 3.2 This table shows the measurement used to access the developed system
lodging, and dining reservations for travelers, the developers adopted the evaluation
tasks for which it was designed was running without error. Operational Stability
suggests that the system or product may fulfil its requirements or serve its
system in carrying out its specified tasks while making the best use of available
out its intended activities or operations while considering variables like time,
and used to enable them to collaborate effectively and serve the desired purpose.
by its targeted users to complete their tasks with efficacy, productivity, and
contentment.
that it may be designed, developed, and put into use in a way that promotes
dangers and to guarantee the safety, integrity, and accessibility of systems, they
pertinent settings.
This chapter covers the interpreted data acquired through the data gathering
seeking answers to the general problems, including the development of the system using
Agile methodology, essential features, and functionalities to provide the hotel and
restaurant management, and evaluating the developed system through ISO evaluations
and suggestions of the respondents that helped the developers improve the design and
1. Planning
will assist travellers and management capabilities for hotel and restaurant
managers to simplify the traveling and reservation process. Once concepts were
interface were identified through interviews with the hotel and restaurant
managers. The planning phase serves as the foundation and starting point for
2. Designing
The developers studied material design and applied what they learned
during the designing phase. The User Interface was intended to look and feel
enough for travellers, hotel, and restaurant manager users to navigate through
easily. The developers created vectors with Figma and Adobe XD.
3. Development
the system's features and functionalities, putting the thoroughly planned layout
and design into an accessible approach. This phase involves developing the
system with Android Studio as the IDE, Java for the programming language,
and XML for layout that serves as the foundation for Gypsy Go. Throughout
the development phase, the developers collaborated, giving ideas and fixing
development process. Each member has tasks to accomplish by the time range
4. Testing
The developers thoroughly examined and verified the system's and the
data they had taken from the database was accurate to ensure everything had
with Android 8.0 Oreo and later versions, with specific optimizations for
Android 13, while remaining accessible to users with earlier Android iterations.
The developers regularly consulted with their capstone adviser to identify the
functions they needed to improve and include to enhance the system's credibility
and user experience. Lastly, the developers examined and tested that all the
5. Deployment
During the deployment phase of the travel app, the developers have been
closely monitored to ensure that all its features work correctly. Moreover, to
accessible to travellers, hotel, and restaurant owners. The result of the said
6. Review
For The review phase of the travel app, the developers have been closely
monitored to know all the reviews that the system gets and to focus on some
features. The result of the said review was to ensure that the application is more
handle bookings and engage with the customers and guests, the developers then
developed these features and functionalities based on the data acquired from
Login Page: The splash screen welcomes the user to the login page after the
user enters their password and authenticated email address to access the system.
Tourist Signup Page: The system requires the traveler user to enter their
information upon the account creation, such as their name, email, and password. The
user is also required to comprehend and agree to the terms and conditions of the system
each item redirects the user to the detailed relevant information about the destination.
A location button attached, as shown in Figure 4.3, links users to a Google Map for
Lodgings Page: Figure 4.4, shown above, showcases the Hotels that have
registered with the system. The detailed information provided by the hotel, including
cancellation policies, can be accessed by clicking each hotel. There are three (3) other
Chat Room Page: The one-to-one (1:1) private chat room page allows users
redirected upon clicking the “Map” button on the Lodgings Page. Google Maps is a
Hotel Booking Form Page: Upon reserving a room, the user is presented with
a form in which they must enter the information the hotel needs to process their
booking. The information needed, as shown in Figure 4.7 such as their full name, the
check-in and check-out dates, how many persons, contact number, email, room
preference, their payment information such as Gcash name and number, along with the
reference number of the transaction for the proof of their payment procedure.
Restaurant Page: Figure 4.8 showcases the Restaurants that have registered
with the system. The detailed information provided by the restaurant, including images,
policies, can be accessed by clicking each restaurant. There are three other (3) buttons
with a form in which they must enter the required information that the restaurant needs
to process their booking. The information needed, as shown in Figure 4.9 such as their
full name, the reservation date, how many persons, contact number, email, room
preference, their payment information such as Gcash name and number, along with the
reference number of the transaction for the proof of their payment procedure.
Profile Page: Figure 4.10 shows the email and name of the user registered in the
system, and they can also change their profile pictures. The two tabs below load their
Hotel Reservation Page: On this page, the traveler’s reservation will be saved
promptly. After the traveler submits the reservation, it will be saved under the pending
reservations to let the user know they have successfully made the reservation and
review their details. Confirmed reservations are the ones that the hotel has confirmed;
past reservations are the ones they have made in the application throughout their
will display.
reservation will be saved promptly. After the traveler submits the reservation, it will be saved
under the pending reservations to let the user know they have successfully made the
confirmed; past reservations are the ones they have made in the application throughout their
account creation, while declined is where the declined reservations made by the hotel will
display.
Host Signup Page: The system requires the user to enter their information upon
the account creation, such as their name, email, and password. The host user must
provide the images of their BIR, DTI, and TIN ID as proof of the user’s business
legitimacy. Lastly, to complete their signup procedure, the user has to comprehend and
agree to the terms and conditions of the system before signing up.
Host Login Reminder Page: This reminder will appear when the user tries to
log in after submitting the signup form. The admin must review their form before
Hotel Preview Page: On this page, the information provided by the hotel and
restaurant will show as a preview; clicking the edit button will redirect them to the page
where they can edit their information as to what their hotel and restaurant needs.
Hotel and Restaurant Management Page: Figure 4.14 displays the page
where the user can quickly provide the needed information. Clicking “save changes”
will upload their restaurant and hotel into the tourist interface. Clicking the cancel
Notification Page: This page updates the hotel and the restaurant about the new
reservations made by the tourist users. The detailed information that the tourist user
entered in the reservation form will appear by clicking on each notification. The
booked the reservation. Finally, the user can accept the reservation and submit the
update into the tourist interface by clicking the confirm booking button.
shows the lists of the conversations the user has had, and clicking on each item will
Host Profile Page: The email and name that the user has registered in the
system can also change their profile pictures. The system's information about the
system, as well as its terms and conditions, are located underneath the user data.
Admin Login Page: The system has only one administrator who uses a pre
Signup Forms List Page: The signup forms retrieved from the signup pages
for hotels and restaurants are displayed in the Signup Forms Lists, as Figure 4.19 shows.
Signup Forms Details Page: The details of each retrieved signup form are
displayed on the form details page. The validate button verifies the account of the hotel
or restaurant, now allowing them to log in. When a hotel or restaurant submits a form
that does not meet the application requirements, the admin will manually contact them
via the email address they have provided to inform them about the specific problem.
Thematic Analysis
from interviewing the selected hotel and restaurant managers and citing relevant data
online to find patterns and relationships among the responses from the transcripts and
the data cited sources. Shown and discussed are themes and sub-themes.
Reservation
• Name, contact number, group size,
information
reservation date, resservation fee
collection
Figure 4.23 Themes and Sub-Themes of Restaurant Data Questions Numbers 1-3
The first theme, "Current Booking Management and Challenges", compares the
communication”, and challenges of “customers not showing up”. The second theme is
“Current Payment Transactions,” which compares collected data, which gained Gcash
as the standard payment method for online transactions, which requires reservation fee
and face-to-face for full payment. The third theme, "Reservation information
collection," gained the data by collecting names, contact numbers, group sizes,
Figure 4.24 Themes and Sub-Themes of Restaurant Data Questions Numbers 4-7
data, which gained a common sub-theme of showcasing the restaurants' menus and their
prices. The fifth theme, "Features and functionalities expectations," gained typical sub-
themes of the ability to showcase their menu and specialities, capable of handling
reservations. The sixth theme, "Payment Fraud Prevention," earned the sub-theme of
the payment gateway with legal requirements if online and then the Money bill checker
if offline. Lastly, the seventh theme, “Cancellation policies,” gained the sub-theme that
Current
• Remote, online
communication
Current Online
• Gcash and PayMaya
Payment Method
Information
• Contact information, number
collected from
guests of guests, chosen room rates
Figure 4.25 Themes and Sub-Themes of Hotel Data Questions Numbers 1-4
The first theme, “Current Booking Management and Challenges” compares the
collected data which gained typical sub-themes: Walk-ins, phone calls, online, non-
refundable bookings. The second theme, "Current communication", achieved the sub-
themes of remote or online communication. "Current online payment method" was the
third theme, which gained the sub-themes of the commonality of Gcash and Paymaya
as their current online payment methods. The fourth theme, "Information collected from
guests", gained sub-themes of contact information, number of guests, and chosen room
rates.
Cancellation
policies • Require early cancellations,
no cancellations.
Figure 4.26 Themes and Sub-Themes of Restaurant Data Questions Numbers 5-9
The fifth theme, “Information to attract customers", compares the collected data,
which gained typical sub-themes of room rates and amenities. The sixth theme
Prevention" serves as the seventh theme, which earned the sub-theme payment gateway
with legal requirements for online payment handling and money bill checker for offline.
Eight articles, "Data Security", which gained a sub-theme of proper data storage and
host must present certain documents to prove their legitimacy and authenticity for
the application's security to avoid trolls. Signing up includes their DTI (Department
of Trade and Industry), BIR (Bureau of Internal Revenue) Form, and TIN ID (Tax
be the one to validate their documents, whether they are legitimate or dummy. After
confirming that these are authentic, the administrator will verify their account. Once
the administrator has verified the business account, it will send their email so that
they can log in to the system, and they can now start managing their information
2. Listing
3. Updates
Notification. The hotel and restaurant must receive updates regarding with
updates for incoming reservations. However, they need to be able to let the guests
and customers know whenever they have confirmed their reservation or declined
the reservation, so following that, the developers added the functionality to sort out
the notifications—starting from new notifications with the ability to show detailed
information from the guest and customers along with the buttons confirming and
declining the reservation. The OK button lets the managers notify the
reservation. Same with the decline button, but in this case, upon clicking decline,
the hotel/restaurant must provide a reason for declination to let the guest and
customer know the reason. Then, this notification will fall under the declined
confusion that will stir up the updates in one place, decreasing the user experience.
4. Communication
5. Payment
most used online payment method is Gcash. The developers implemented the
payment gateway inside the system, letting the hotel and restaurant upload their
Gcash information to receive the reservation fee. The users of the travler
interface must provide the reference number and the receipt photo of the
transaction.
The functional Stability category has three criteria which determine the general
rating. These criteria include whether the system meets the needs of tourists in
accessing information about tourist spots, booking lodging, and making dining
reservations with the highest rating of 4.79 and interpretation Strongly Agree; second,
whether it is capable of managing hotel and restaurant details, receiving updates, and
providing easy-to-use messaging features with a mean rating of 4.53 and interpretation
of Agree; and lastly, whether communication between tourists and hosts via messaging
is clear and practical with a 4.54 rating mean and Agree on interpretation. The overall
mean rating for this category is 4.62, which is interpreted as Strongly Agree.
restaurant reservations.
Performance Efficiency has three criteria that determine its overall mean rating
and interpretation. The first criterion concerns the system's ability to conveniently
second criterion is related to its ability to seamlessly integrate third-party functions such
as Google Maps and chat systems. This criterion has a rating of 4.61, and the
interpretation is also strongly Agreed. The third criterion concerns the ability to
effortlessly communicate with the system to maintain the accuracy of hosts' data and
quickly handle inquiries and reservations. This criterion has received the lowest mean
rating of 4.54, but the interpretation is still agreeable. The respondents of this capstone
project have approved the system's performance efficiency with a mean rating of 4.57,
smoothly.
The compatibility category has two criteria determining its overall rating. The
first criterion is related to the system's ability to work reliably across different Android
versions, with a rating mean of 4.49 and the interpretation of Agree. The second
criterion is related to its responsiveness to user actions and ability to run smoothly, with
a rating mean of 4.51, and the interpretation is also Agree. The total mean compatibility
1. The system eases booking hotel rooms and 4.62 Strongly Agree
Usability has three criteria that determine its overall mean rating and
interpretation. The first criterion is related to the system's ability to make hotel room
booking and restaurant reservations easier, has a mean rating of 4.62 and is interpreted
as Strongly Agree. The second criterion is related to its effectiveness in keeping track
Agree. The third criterion is associated with the interface's simplicity and convenience
for tourist users who use Google Maps integration for seamless navigation. This
criterion has received the lowest mean rating of 4.57, but the interpretation is still
Agreeable. The respondents of this capstone project have approved the system's
performance efficiency with a mean rating of 4.60, and the arrangement is Strongly
Agree.
ease.
customers.
The reliability category has three criteria to determine its overall mean rating
and interpretation. The first criterion is related to the content structure, which should be
neatly organized and help users navigate the system quickly. This criterion has a rating
of 4.58, and the interpretation is Agree. The second criterion concerns the user interface,
which should be modern and provide a satisfactory user experience. This criterion has
a rating of 4.47, and the interpretation is also Agreeable. The third criterion is related
to the content structure of the host interface, which should be feasible and allow for
easier management of their details and communication with guests and customers. This
criterion has the highest mean rating of 4.59, and the interpretation is also Agree.
Overall, the respondents of this capstone project have approved the system's
performance efficiency with a mean rating of 4.52, and the interpretation is Agree.
more accessible.
Maintainability has three criteria that determine its total mean rating and
interpretation. The first criterion is related to the system's interface and features
responsible for managing and updating information. This criterion has received the
highest rating of 4.58, and the interpretation is Agree. The second criterion is if the
system upholds its primary features over time and functions as intended. This criterion
has received the lowest rating of 4.54, but still with the interpretation of Agree. The
ability of the system to inform users about their reservations in response to updates
made by hosts via the chat system. This criterion has a mean rating of 4.55 and the
interpretation of Agree. Overall, the respondents of this capstone project have approved
the system's performance efficiency with a mean rating of 4.56 and the interpretation
of Agree.
1. Prioritizes data security so that some user data is 4.65 Strongly Agree
increasing privacy.
2. The system informs the user about how their data 4.59 Agree
messaging.
Security has three criteria to determine the overall rating. The first criterion is
whether the system informs the user about how their data is stored before signing up,
with a lowest rating of 4.65 and an interpretation of 'Strongly Agree.' The second
criterion is whether the hosts and guests can connect comfortably without worrying
about data breaches via messaging, with a mean rating of 4.59 and an interpretation of
Agree.' Lastly, the third criterion is whether the system prioritizes data security and
only allows authorized users to access some user data, increasing privacy, with the
highest mean rating of 4.62 and an interpretation of Strongly Agree.'. The system's
and user-friendly.
user experience.
they need.
Portability has three criteria to determine the overall rating: (1) The system's
simplicity and ease of use enhance user experience with a mean score of 4.69,
interpreted as Strongly Agree.' (2) The criterion 'Gathers all necessary travel resources
in a single place' ensures that users can easily find what they need, with a mean rating
of 4.56, also interpreted as Agree.' (3) The criteria 'Offers essential information and
functionality in one place within the system' is convenient and user-friendly, achieving
the highest mean rating of 4.66, interpreted as 'Strongly Agree.' Overall, the system's
Interpretation
Summary
enables users to browse various trip locations, lodging options, and dining
establishments while having the ability to book reservations. Additionally, users can
become hosts in the application by offering hotel and restaurant management services
collaboratively develop the system with an understanding of the users' needs, from
thorough data enough to understand the user's needs for the hotel and restaurant
management interface have been analyzed and applied. The survey was conducted to
been undertaken to identify the features, functionalities, and needs of the businesses in
RECOMMENDATIONS
This chapter represents the summary of findings, conclusions of the study and
Summary of Findings
The project's main objective is to design and develop a system to assist travellers in
their travel journey by providing them with a list of travel destinations, lodgings, and
dining establishments, allowing them to find and reserve a place to stay and dine. The
system also aims to provide information management for hotels and restaurants by
offering management services that could display their establishments through the
system.
like Figma and Adobe XD were utilized for vector creation, enhancing the
primarily.
functions and collaboration among developers were maintained through regular
system and its database connection. Emphasis was placed on data accuracy, and
real-time updates and navigation. The results of the review reinforced the
2. The application's hotel and restaurant management features are designed to offer
Drawing insights from interviews with selected hotels and restaurants, the
development team ensured that the features and functionalities within the
documents such as DTI, BIR Form, and TIN ID during the sign-up process to
informed decision-making.
through the traveller interface. The reservation handling process includes real-
a direct messaging system within the Management User Interface, enabling fast
positively impacting the user experience for both hosts and guests.
can upload their Gcash information, allowing them to receive reservation fees.
Users on the traveler interface provide reference numbers and receipt photos for
transaction verification.
3. The system used ISO (International Standard For Organization) 25010, which
used the Likert scale and conducted a software evaluation on tourists, Hotel
Compatibility was interpreted and agreed with a total mean of 4.5. Usability
were surveyed, including travelers (88), hotel managers (8), and restaurant
managers (4). The ISO software evaluation's overall weighted mean gained a
Conclusions
laid a robust foundation. The design phase, guided by material design principles
and implemented through tools like Figma and Adobe XD, ensured a modern
Android Studio, Java, and XML allowed for a structured coding process, while
progress.
for travelers and managers. The review phase, focusing on user feedback and
stage. The successful deployment and positive reception during the review
phase indicate not only the current effectiveness of the system but also its
2. The examination of the hotel and restaurant management features within the
business hosts with powerful tools for efficient reservation management. The
DTI, BIR Form, and TIN ID, demonstrates a commitment to security, ensuring
as a comprehensive and reliable platform for both business hosts and travelers,
3. The researcher concluded that the application had met the requirements and
Portability are said to be passed and accepted based on the conducted survey,
Recommendations
After reviewing the data acquired from developing the system through the agile
method, conducting interview data, and interpreting the data obtained from the survey,
project phases, the development team should embrace and iterate on the Agile
resolution of issues.
expectations, the team should stay abreast of emerging trends, technologies, and
user preferences in the travel and reservation domain. This proactive approach
feedback, and remaining vigilant to industry trends, the development team can
not only sustain the current success of Gypsy Go but also position the
or user feedback under the hotel and restaurant posts is recommended for much
to keep the system more stable and up-to-date information. Investigating new
design trends and technological advancements may present chances for Gypsy
ISO 25000 Portal. iso25000.com. (n.d.). Retrieved April 30, 2023, from
https://iso25000.com/index.php/en/iso-25000-standards/iso-25010
Mistry, S. (2023, November 20). How to deal with common challenges in hotel
industry in 2023?. eZee Absolute. https://www.ezeeabsolute.com/blog/how-to-
deal-with-challenges-in-hotel-industry/
Öztürk, A., Bilgihan, A., Nusair, K., & Okumus, F. (2016). What keeps the mobile
hotel booking users loyal? Investigating the roles of self-efficacy, compatibility,
perceived ease of use, and perceived convenience. International Journal of
Information Management, 36(6), 1350–1359.
https://doi.org/10.1016/j.ijinfomgt.2016.04.005
Swaid, S. (2018, November 1). M-Commerce Apps Usability: The Case of Mobile
Hotel Booking Apps. ResearchGate.
https://www.researchgate.net/publication/328662819_M-
Commerce_Apps_Usability_The_Case_of_Mobile_Hotel_Booking_Apps?fbc
lid=IwAR3qSyt-
MmNGFFcVqD2oPTTtFllYxq5gZ4DI8aH059ltIYW8Xj37JEijAw0
APPENDIX A
Letter of Request for Thesis Adviser
5 4 3 2 1
Function Sustainability
1. The system caters to the needs of tourists in accessing
tourist spots information, lodging booking, and dining
reservations.
2. The system is capable of managing hotel and
restaurant details, receiving updates, and messages are
simple to use.
3. Communicating via messaging between tourists and
hosts is relatively clear and practical.
Performance Efficiency
1. The system conveniently provide access to browsing
tourist spot information, lodging and restaurant
reservations.
2. The system is responsive to user actions and runs
smoothly.
3. Effortlessly communicate with the system to maintain
the accuracy of hosts data and quickly handle inquiries
and reservations.
Compatibility
1. The system retains to work reliably across different
Android versions.
2. The system seamlessly integrates third-party functions
such as Google maps and chat system.
Usability
1. The system eases booking hotel rooms and making
restaurant reservations.
2. Tourist users found the interface to be simple and
convenient for using Google Maps integration for
seamless navigation.
3. Effectively keep track of incoming reservations.
Readability
1. It offers a neatly structured content, enabling users to
navigate throughout the system with ease.
2. The system’s user interface is modern and suited to a
satisfactory user experience.
3. The content structure of the host interface is feasible,
allowing for easier management of their details and
communication with guests and customers.
Maintainability
1. The system’s interface and features managing and
updating information makes it more accessible.
2. The system guaranteeing that users can depend on its
functionality during their vacation.
3. The system upholds its primary features throughout
time and function as intended.
4. The ability of the system to inform users about their
reservations in response to updates made by hosts via
chat system.
Company Name:
Interviewee/s:
Question 1: How does the hotel currently manage bookings? Are there any challenges
that is the hotel encountering with the existing methods?
Answer 1:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 2: How does the hotel get in touch with book in guests?
Answer 2:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 3: Does the hotel handle payment transactions online? If so, could you explain
the management of this approach?
Answer 3:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 4: What information does the hotel would need to collect from the guests
when booking for a room?
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 5: What specific information and details about the hotel would you need to
showcase in order to attract guests?
Answer 5:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 6: What features and functionalities would you expect from an application
that allows you to showcase your hotel for guests?
Answer 6:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 7: What safeguards does your hotel have in place to prevent payment fraud?
Answer 7:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Answer 8;
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 9: What are your reservation charge policies? What about in terms of
cancellations?
Answer 9:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Business Name:
Interviewee/s:
Question 1: How does the restaurant currently manage bookings? Are there any
challenges that is the restaurant encountering with the existing methods?
Answer 1:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 2: Do you handle payment transactions online? If you do, could you explain
the management of this approach?
Answer 2:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 3: What information does the restaurant would need to collect from the diners
when making a reservation?
Answer 3:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Answer 4:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 5: What features and functionalities would you expect from an application
that allows you to list your restaurant for customers?
Answer 5:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 6: What safeguards does your restaurant have in place to prevent payment
fraud?
Answer 6:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Question 7: What are your reservation charge policies? What about in terms of
cancellations?
Answer 7:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Functional Sustainability
1. 80 18 1 0 0 4.79
2. 58 38 2 0 1 4.53
3. 63 28 7 1 0 4.54
Overall Weighted Mean 4.63 Strongly Agree
Performance Efficiency
1. 60 36 3 0 0 4.57
2. 70 20 9 0 0 4.61
3. 58 37 4 0 0 4.54
Overall Weighted 4.5 Strongly Agree
Compatibility
1. 61 26 12 0 0 4.49
2. 57 36 6 0 0 4.51
Overall Weighted 4.44 Strongly Agree
Usability
1. 66 30 2 1 0 4.62
2. 64 28 7 0 0 4.57
3. 64 33 2 0 0 4.62
Overall Weighted 4.55 Strongly Agree
Reliability
1. 64 31 2 2 0 4.58
2. 55 37 6 1 0 4.47
3. 64 31 3 1 0 4.59
Maintainability
1. 61 36 1 1 0 4.58
2. 61 33 3 2 0 4.54
3. 61 34 6 0 0 4.55
Overall Weighted 4.51 Strongly Agree
Security
1. 66 32 1 0 0 4.65
2. 63 33 2 1 0 4.59
3. 56 29 4 0 0 4.62
Overall Weighted 4.59 Strongly Agree
Portability
1. 72 25 1 1 0 4.69
2. 60 35 4 0 0 4.56
3. 69 27 3 0 0 4.66
Overall Weighted 4.64 Strongly Agree
Figure: This figure shows the Entity Relationship Diagram of the proposed system
Initial analysis shows that the application will take approximately twelve
months. The planning of the application takes place over month of January up to second
comprehensive and seamless navigation for the travelers. For the month of March , the
application is undergoing the progress of the analysis phase, in order to connect the
problems' causes and solutions, the researchers gathered and reviewed relevant
literature and studies from local and foreign that were similar to our study’s focus.
While designing the application, which takes about two months from April until the last
week of May , the developers believed that the application's design should be user-
friendly because a travel guide application should be accessible to users of all ages.
of time during the five months starting from the month of june up to October. For
instance, the implementation phase took place during the entire month of November.
December.
Question 1: How does the restaurant currently manage bookings? Are there any
Answer 1: Pag booking reservation pinapapunta namin sila dito, kung tatawag ka
hindi kasi malinaw pag sa cellphone na uusap, kailangan hanggat maari face to
face kami nag uusap ng client para siguradong malinaw yung usapan pag mag
papareserve sila sa ganitong resto.
Meron lalo yung mga mahihirap na pinapagawa nila sa mga customer iba iba,
kasi tumatanggap kami ng catering minsan may mga request na hindi namin
kayang ibigay mejo mahirap pero kahit papaano nagagawan nammin n paraan
para kahit pano yung customer is satisfied.
Question 2: Do you handle payment transactions online? If you do, could you explain
Question 3: What information does the restaurant would need to collect from the diners
Answer 3: Information sa customer asi nag kinukuha lang namin telephone number or
contact number lang yung mahalaga para kung magkaroon kami ng problema
sa reservation madal namin sila ma contact.
Question 4: What specific information about your restaurant would you need to present
Question 5: What features and functionalities would you expect from an application
Answer 5: hindi pa napag uusapan ng boss namin , pwede mga commercial, tarpaulin
post sa fb ganon.
Question 6: What safeguards does your restaurant have in place to prevent payment
fraud?
pero meron kaming gamit na pang detect sa 1000 at 500, tsaka meron na din
Question 7: What are your reservation charge policies? What about in terms of
cancellations?
Answer 7: sa cancellation pag may nagpa reserve samin ano 1 week before ang
Question 1: How does the hotel currently manage bookings? Are there any challenges
Answer 1: yung iba nag pupunta dito tapos bay call. oo madalas pero no refund kami
Question 2: How does the hotel get in touch with book in guests?
Answer 2:.Ineexplain namin yung about sa resort namin kung ano yung available
Question 3: Does the hotel handle payment transactions online? If so, could you
Question 4: What information does the hotel would need to collect from the guests
Answer 4:.details nya number nya tska yubg tagasaan sya para completo yung
information nila.
Question 5: What specific information and details about the hotel would you need to
Answer 5:.sa tubig lang kami walang chemical or chlorine pure water ang gamit
namin.
Question 6: What features and functionalities would you expect from an application
Answer 6:.sa ngayon wala kami kaya open cottage kami at wala kaming mga room.
Question 7: What safeguards does your hotel have in place to prevent payment fraud?
Question 8: What security measures do you consider essential for protecting guest and
hotel data?
Answer 8: Samin bawat groupo may name samin incase na may mangyari pwede sila
macontact.
Question 9: What are your reservation charge policies? What about in terms of
cancellations?
Answer 9: dapat 1 week before para kung may problema ma adjust nila or kelan sila
available pero kung one day before nag cancel ka ano dimo makukuha yung
deposit.
In this regard, please evaluate the developed system by using the scale below and placing a mark beside its corresponding numerical rating
Data Privacy: We assure you that the information you provide in this survey will be kept and treated with the utmost confidentiality. It will
only be used for the purpose of data gathering and evaluating our software. Your responses will not be shared with any third parties, and
all data will be anonymized and aggregated for analysis.
Name (Optional)
Traveler
Hotel Owner/Staff
Restaurants
Owner/Staff
Untitled Section
We kindly request that you watch the provided video below before proceeding with the evaluation. Your insights are valuable, and this video will provide essential
context for your answers. Thank you for your cooperation!
GypsyGo | Software
Evaluation
Kindly indicate your level of satisfaction with the system on a scale of one to five, where five (5) corresponds to "Strongly Agree", four (4) corresponds to "Agree", three (3)
corresponds to "Neutral", two (2) corresponds to "Disagree", and lastly, one (1) corresponds to "Strongly Disagree".
5 - Strongly
Agree 4 -
Agree
3 - Neutral
1.2 The system is capable of managing hotel and restaurant details, receiving updates, and messages are simple to use. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
1.3 Communicating via chat system between tourists and hosts is relatively clear and practical. *
5 - Strongly
Agree 4 -
Agree
2.1 The system conveniently provide access to browsing tourist spot information, lodging and restaurant reservations. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5 - Strongly
Agree 4 -
Agree
3 - Neutral
2.3 Effortlessly communicate with the system to maintain the accuracy of hosts data and quickly handle inquiries and reservations. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
3.1 The system retains to work reliably across different Android versions. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
3.2 The system seamlessly integrates third-party function like Google maps. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5.1 It offers a neatly structured content, enabling users to navigate throughout the system with ease. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5.3 The content structure of the host interface is feasible, allowing for easier management of their details and communication with guests and
customers. *
5 - Strongly
Agree 4 -
Agree
6.1 The system’s interface and features managing and updating information makes it more accessible. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
6.2 The system upholds its primary features throughout time and function as intended. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
6.3 The ability of the system to inform users about their reservations in response to updates made
by hosts via chat system. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5 - Strongly
Agree 4 -
Agree
3 - Neutral
7.2 The system informs the user about how their personal data is stored before signing up. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
7.3 Tourists and hosts can connect comfortably without worrying regarding data breaches via messaging. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
8.1 Offers essential information and functionality in one place within the system is convenient and user-friendly. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
5 - Strongly
Agree 4 -
Agree
3 - Neutral
8.3 Gathers all necessary travel resources in a single place, which ensures
users can quickly find what they need. *
5 - Strongly
Agree 4 -
Agree
3 - Neutral
Feedback or any additional thoughts you may have regarding the presented system. *
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
finish();
});
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_register);
tabLayout = findViewById(R.id.tabLayout);
loginsignupContainer = findViewById(R.id.loginsignupContainer);
tabLayout.addTab(loginTab);
tabLayout.addTab(signupTab);
loadFragment(loginFragment);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
if (tab.getText() != null) {
if (tab.getText().equals("Login")) {
loadFragment(loginFragment);
} else if (tab.getText().equals("Signup")) {
loadFragment(signupFragment);
@Override
@Override
});
getSupportFragmentManager().beginTransaction()
.replace(R.id.loginsignupContainer, fragment)
.commit();
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_register2);
tabLayout = findViewById(R.id.tabLayout);
hotelSignupContainer = findViewById(R.id.hotelSignupContainer);
tabLayout.addTab(hotelTab);
tabLayout.addTab(restoTab);
loadFragment(hotelSignupFragment);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
if (tab.getText() != null) {
if (tab.getText().equals("Hotel")) {
loadFragment(hotelSignupFragment);
loadFragment(restoSignupFragment);
@Override
@Override
});
getSupportFragmentManager().beginTransaction()
.replace(R.id.hotelSignupContainer, fragment)
.commit();
LoginFragment
@Override
savedInstanceState) {
auth = FirebaseAuth.getInstance();
lEmail = view.findViewById(R.id.login_email);
lPass = view.findViewById(R.id.login_password);
loginBtn = view.findViewById(R.id.login_button);
signupRedirect = view.findViewById(R.id.signupRedirect);
forgotPassword = view.findViewById(R.id.forgotPass);
login();
signRedirect();
progressDialog.setMessage("Logging in...");
progressDialog.setCancelable(false);
@Override
null);
builder.setView(dialogView);
dialogView.findViewById(R.id.btnReset).setOnClickListener(new
View.OnClickListener() {
@Override
if (TextUtils.isEmpty(userEmail) ||
!Patterns.EMAIL_ADDRESS.matcher(userEmail).matches()) {
Toast.LENGTH_SHORT).show();
return;
auth.sendPasswordResetEmail(userEmail).addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
if (task.isSuccessful()) {
Toast.LENGTH_SHORT).show();
dialog.dismiss();
} else {
Toast.LENGTH_SHORT).show();
});
});
dialogView.findViewById(R.id.btnCancel).setOnClickListener(new
View.OnClickListener() {
@Override
dialog.dismiss();
});
if (dialog.getWindow() != null) {
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
dialog.show();
});
return view;
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
if (!email.isEmpty() &&
Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
if (!pass.isEmpty()) {
progressDialog.show();
auth.signInWithEmailAndPassword(email, pass)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
progressDialog.dismiss();
DatabaseReference userRef =
FirebaseDatabase.getInstance().getReference("users");
ValueEventListener() {
@Override
snapshot) {
if (snapshot.exists()) {
boolean isValidated =
snapshot.child("isValidated").getValue(Boolean.class);
if (isValidated) {
SharedPreferences sharedPreferences =
requireContext().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor =
sharedPreferences.edit();
editor.putString("email", "true");
editor.apply();
MainActivity2.class);
startActivity(intent);
requireActivity().finish();
} else {
showSignupReminderDialog();
} else {
ValueEventListener() {
@Override
DataSnapshot snapshot) {
if (snapshot.exists()) {
boolean isValidated =
snapshot.child("isValidated").getValue(Boolean.class);
if (isValidated) {
SharedPreferences sharedPreferences =
requireContext().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor =
sharedPreferences.edit();
editor.putString("email", "true");
editor.apply();
Intent(requireActivity(), MainActivity3.class);
startActivity(intent);
requireActivity().finish();
} else {
showSignupReminderDialog();
if (isAdded()) {
SharedPreferences sharedPreferences =
requireContext().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor =
sharedPreferences.edit();
editor.putString("email", "true");
editor.apply();
MainActivity.class);
startActivity(intent);
requireActivity().finish();
@Override
DatabaseError error) {
});
@Override
error) {
});
} else {
})
.addOnFailureListener(new OnFailureListener() {
@Override
progressDialog.dismiss();
Toast.LENGTH_SHORT).show();
});
} else {
lPass.setError("Password required!");
} else if (email.isEmpty()) {
});
signupRedirect.setOnClickListener(new View.OnClickListener() {
@Override
FragmentTransaction transaction =
getParentFragmentManager().beginTransaction();
transaction.replace(R.id.loginsignupContainer, signupFragment);
transaction.addToBackStack(null);
transaction.commit();
});
dialogFragment.show(getParentFragmentManager(), "SignupReminder");
dtiFileNameTextView;
@Override
savedInstanceState) {
database = FirebaseDatabase.getInstance();
auth = FirebaseAuth.getInstance();
sName = view.findViewById(R.id.signup_name);
sEmail = view.findViewById(R.id.signup_email);
sConfirmPass = view.findViewById(R.id.confirm);
signupBtn = view.findViewById(R.id.signup_button);
loginRedirect = view.findViewById(R.id.loginRedirect);
Tourist = view.findViewById(R.id.touristSignup);
termsCheckbox = view.findViewById(R.id.termsCheckbox);
googleBtn = view.findViewById(R.id.googleBtn);
birUploadButton = view.findViewById(R.id.birUpload);
birFileNameTextView = view.findViewById(R.id.birFile);
birUploadButton.setOnClickListener(new View.OnClickListener() {
@Override
openGallery(PICK_BIR_IMAGE_REQUEST);
});
tinUploadButton = view.findViewById(R.id.tinUpload);
tinFileNameTextView = view.findViewById(R.id.tinFile);
tinUploadButton.setOnClickListener(new View.OnClickListener() {
@Override
openGallery(PICK_TIN_IMAGE_REQUEST);
});
dtiFileNameTextView = view.findViewById(R.id.dtiFile);
dtiUploadButton.setOnClickListener(new View.OnClickListener() {
@Override
openGallery(PICK_DTI_IMAGE_REQUEST);
});
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail().build();
googleBtn.setOnClickListener(new View.OnClickListener() {
@Override
googleSignIn();
});
signp();
logRedirect();
touristSign();
return view;
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, requestCode);
@Override
data) {
switch (requestCode) {
case RC_SIGN_IN:
if (resultCode == RESULT_OK) {
Task<GoogleSignInAccount> task =
GoogleSignIn.getSignedInAccountFromIntent(data);
try {
firebaseAuth(account.getIdToken());
} catch (ApiException e) {
e.getStatusCode(), Toast.LENGTH_SHORT).show();
break;
case PICK_BIR_IMAGE_REQUEST:
birImageUri = imageUri;
birFileName = selectedFileName;
birFileNameTextView.setText(birFileName);
break;
case PICK_TIN_IMAGE_REQUEST:
tinImageUri = imageUri;
tinFileName = selectedFileName;
tinFileNameTextView.setText(tinFileName);
break;
case PICK_DTI_IMAGE_REQUEST:
dtiImageUri = imageUri;
dtiFileName = selectedFileName;
dtiFileNameTextView.setText(dtiFileName);
break;
fileName = cursor.getString(columnIndex);
cursor.close();
return fileName;
signupBtn.setOnClickListener(new View.OnClickListener() {
@Override
if (user.isEmpty()) {
sEmail.setError("Email is required!");
} else if (pass.isEmpty()) {
sPass.setError("Password is required!");
sPass.requestFocus();
} else if (confirmPass.isEmpty()) {
sConfirmPass.requestFocus();
} else if (!pass.equals(confirmPass)) {
sConfirmPass.requestFocus();
Toast.LENGTH_SHORT).show();
} else {
if (!termsCheckbox.isChecked()) {
showTermsAndConditionsDialog();
} else {
progressDialog.show();
termsCheckbox.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener() {
@Override
isChecked) {
if (isChecked) {
signupBtn.setEnabled(true);
showTermsAndConditionsDialog();
} else {
signupBtn.setEnabled(false);
});
String userName) {
auth.createUserWithEmailAndPassword(userEmail, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
if (task.isSuccessful()) {
progressDialog.dismiss();
if (firebaseUser != null) {
sendVerificationEmail();
uploadImagesAndStoreUserData(userId, userEmail,
userName);
Toast.LENGTH_SHORT).show();
})
.addOnFailureListener(new OnFailureListener() {
@Override
if (e instanceof FirebaseAuthUserCollisionException) {
progressDialog.dismiss();
sEmail.requestFocus();
} else {
Toast.LENGTH_SHORT).show();
});
StorageReference storageRef =
FirebaseStorage.getInstance().getReference().child("validFormsIds").child(userId);
birImageRef.putFile(birImageUri)
.addOnSuccessListener(birTaskSnapshot -> {
birImageRef.getDownloadUrl().addOnSuccessListener(birDownloadUrl -
>{
tinImageRef.putFile(tinImageUri)
.addOnSuccessListener(tinTaskSnapshot -> {
tinImageRef.getDownloadUrl().addOnSuccessListener(tinDownloadUrl -> {
dtiImageRef.putFile(dtiImageUri)
.addOnSuccessListener(dtiTaskSnapshot -> {
dtiImageRef.getDownloadUrl().addOnSuccessListener(dtiDownloadUrl -> {
String dtiImageUrl =
dtiDownloadUrl.toString();
})
.addOnFailureListener(e -> {
});
})
.addOnFailureListener(e -> {
});
});
})
.addOnFailureListener(e -> {
e.getMessage(), Toast.LENGTH_SHORT).show();
});
});
});
database.getReference("users").child("Hotel").child(userId);
userData.put("name", userName);
userData.put("email", userEmail);
userData.put("bir", birImageUrl);
userData.put("tin", tinImageUrl);
userData.put("dti", dtiImageUrl);
userData.put("isValidated", false);
userRef.setValue(userData)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
MainActivityRegister.class);
startActivity(intent);
})
.addOnFailureListener(new OnFailureListener() {
@Override
Toast.LENGTH_SHORT).show();
});
if (firebaseUser != null) {
firebaseUser.sendEmailVerification().addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
if (task.isSuccessful()) {
address", Toast.LENGTH_SHORT).show();
} else {
failed", Toast.LENGTH_SHORT).show();
});
loginRedirect.setOnClickListener(new View.OnClickListener() {
@Override
Tourist.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
startActivityForResult(intent, RC_SIGN_IN);
auth.signInWithCredential(credential)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
if (task.isSuccessful()) {
map.put("id", user.getUid());
map.put("name", user.getDisplayName());
map.put("email", user.getEmail());
DatabaseReference touristRef =
database.getReference("users").child("Hotel").child(uid);
touristRef.setValue(map);
MainActivityRegister.class);
startActivity(intent);
else {
Toast.LENGTH_SHORT).show();
});
TermsAndConditionsDialog2();
dialogFragment.show(getParentFragmentManager(), "TermsDialog");
signupBtn.setEnabled(isEnabled);
BottomNavigationView BNV;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BNV = findViewById(R.id.bottom_navigation);
getSupportFragmentManager().beginTransaction().replace(R.id.container,
TF).commit();
NavigationBarView.OnItemSelectedListener() {
@Override
switch (item.getItemId()){
case R.id.travel_loc:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
TF).commit();
return true;
case R.id.hotel_list:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
HF).commit();
return true;
case R.id.resto_list:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
RF).commit();
return true;
case R.id.msg_list:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
MF).commit();
return true;
getSupportFragmentManager().beginTransaction().replace(R.id.container,
PF).commit();
return true;
return false;
});
BottomNavigationView BNV;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
getSupportFragmentManager().beginTransaction().replace(R.id.container,
HEF).commit();
BNV.setOnItemSelectedListener(new
NavigationBarView.OnItemSelectedListener() {
@Override
switch (item.getItemId()){
case R.id.hotel_btn:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
HEF).commit();
return true;
case R.id.notif_btn:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
HNF).commit();
return true;
case R.id.message_btn:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
HMF).commit();
case R.id.profile_btn:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
HPF).commit();
return true;
return false;
});
BottomNavigationView BNV;
@Override
super.onCreate(savedInstanceState);
BNV = findViewById(R.id.bottom_navigation);
getSupportFragmentManager().beginTransaction().replace(R.id.container,
REF).commit();
BNV.setOnItemSelectedListener(new
NavigationBarView.OnItemSelectedListener() {
@Override
switch (item.getItemId()){
case R.id.resto_btn:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
REF).commit();
return true;
case R.id.notif_btn:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
RNF).commit();
return true;
case R.id.message_btn:
RMF).commit();
return true;
case R.id.profile_btn:
getSupportFragmentManager().beginTransaction().replace(R.id.container,
RPF).commit();
return true;
return false;
});
Destinations [TravelFragment]
RecyclerView recyclerView;
ArrayList<ParentModelClass> parentModelClassArrayList;
natureSpot, parkSpot;
ParentAdapter parentAdapter;
@Override
Bundle savedInstanceState) {
// para sa title
CollapsingToolbarLayout collapsingToolbar =
view.findViewById(R.id.Collapsing_toolbar);
collapsingToolbar.setCollapsedTitleTypeface(customFont);
collapsingToolbar.setExpandedTitleTypeface(customFont);
collapsingToolbar.setCollapsedTitleTextColor(Color.WHITE);
collapsingToolbar.setExpandedTitleColor(Color.WHITE);
recyclerView = view.findViewById(R.id.rv_parent);
if (activity.getSupportActionBar() != null) {
activity.getSupportActionBar().hide();
// SET NG CATEGORIES
// RELIGIOUS SPOT
// the parent
religiousSpot));
requireContext());
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
recyclerView.setAdapter(parentAdapter);
parentAdapter.setOnChildItemClickListener(new
ParentAdapter.OnChildItemClickListener() {
@Override
if (category.equals("Popular Destinations")) {
if (imageResourceId == R.drawable.grotto) {
startActivity(intent);
startActivity(intent);
startActivity(intent);
});
.child("users")
.child(currentUserId)
.child("name");
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
TextView userNameTextView =
view.findViewById(R.id.userNameTextView);
@Override
});
grottoLayout = view.findViewById(R.id.grotto);
barasoainLayout = view.findViewById(R.id.barasoain);
standrewLayout = view.findViewById(R.id.standrew);
grottoLayout.setOnClickListener(new View.OnClickListener() {
});
barasoainLayout.setOnClickListener(new View.OnClickListener() {
@Override
});
standrewLayout.setOnClickListener(new View.OnClickListener() {
@Override
});
biakLayout = view.findViewById(R.id.biak);
manalmonLayout = view.findViewById(R.id.manalmon);
puningLayout = view.findViewById(R.id.puning);
biakLayout.setOnClickListener(new View.OnClickListener() {
});
manalmonLayout.setOnClickListener(new View.OnClickListener() {
@Override
});
puningLayout.setOnClickListener(new View.OnClickListener() {
@Override
});
ciudadLayout = view.findViewById(R.id.ciudad);
kaypianLayout = view.findViewById(R.id.dam);
ricardoLayout = view.findViewById(R.id.heritage);
ciudadLayout.setOnClickListener(new View.OnClickListener() {
});
kaypianLayout.setOnClickListener(new View.OnClickListener() {
@Override
});
ricardoLayout.setOnClickListener(new View.OnClickListener() {
@Override
});
return view;
Destination-Detailed [Barasoain]
FloatingActionButton showMap;
ImageView backButton;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_barasoain);
showMap = findViewById(R.id.baras_map);
backButton = findViewById(R.id.back_btn);
showMap.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
onBackPressed();
Destination-Map [BarasoainMap]
OnMapReadyCallback {
GoogleMap gMap;
FrameLayout map;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_barasoain_map);
map = findViewById(R.id.map_baras);
getSupportFragmentManager().findFragmentById(R.id.map_baras);
mapFragment.getMapAsync(this);
@Override
this.gMap = googleMap;
this.gMap.addMarker(new MarkerOptions().position(mapBaras).title("Marker in
Barasoain"));
this.gMap.moveCamera(CameraUpdateFactory.newLatLng(mapBaras));
@Nullable
@Override
CollapsingToolbarLayout collapsingToolbar =
view.findViewById(R.id.Collapsing_toolbar);
collapsingToolbar.setCollapsedTitleTypeface(customFont);
collapsingToolbar.setExpandedTitleTypeface(customFont);
collapsingToolbar.setCollapsedTitleTextColor(Color.WHITE);
collapsingToolbar.setExpandedTitleColor(Color.WHITE);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
recyclerView.setAdapter(adapter);
databaseRef = FirebaseDatabase.getInstance().getReference("hotels");
storage = FirebaseStorage.getInstance();
storageRef = storage.getReference("hotel_images");
retrieve();
return view;
intent.putExtra("hotelKey", hotel.getHotelId());
startActivity(intent);
databaseRef.addValueEventListener(new ValueEventListener() {
@Override
hotelList.clear();
String hotelDescription =
hotelSnapshot.child("description").getValue(String.class);
String hotelAddress =
hotelSnapshot.child("address").getValue(String.class);
String HotelAddress =
hotelSnapshot.child("hotelAddress").getValue(String.class);
String HotelContact =
hotelSnapshot.child("hotelContact").getValue(String.class);
String HotelEmail =
hotelSnapshot.child("hotelEmail").getValue(String.class);
hotelSnapshot.child("cancellationPolicy").getValue(String.class);
imageUrls.add(imageUrl);
hotelList.add(hotelModel);
adapter.notifyDataSetChanged();
@Override
databaseError.getMessage());
});
@Nullable
@Override
CollapsingToolbarLayout collapsingToolbar =
view.findViewById(R.id.Collapsing_toolbar);
collapsingToolbar.setCollapsedTitleTypeface(customFont);
collapsingToolbar.setExpandedTitleTypeface(customFont);
collapsingToolbar.setCollapsedTitleTextColor(Color.WHITE);
collapsingToolbar.setExpandedTitleColor(Color.WHITE);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setAdapter(adapter);
databaseRef = FirebaseDatabase.getInstance().getReference("restaurants");
storage = FirebaseStorage.getInstance();
storageRef = storage.getReference("restaurant_images");
retrieve();
return view;
intent.putExtra("restoKey", resto.getRestoId());
startActivity(intent);
databaseRef.addValueEventListener(new ValueEventListener() {
@Override
restoList.clear();
String restoDescription =
restoSnapshot.child("description").getValue(String.class);
restoSnapshot.child("address").getValue(String.class);
String restoContact =
restoSnapshot.child("contact").getValue(String.class);
String CancellationPolicy =
restoSnapshot.child("cancellationPolicy").getValue(String.class);
imageUrls.add(imageUrl);
restoList.add(restoModel);
adapter.notifyDataSetChanged();
@Override
databaseError.getMessage());
});
Detailed-Hotel [DynamicHotel]
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dynamic_hotel);
mAuth = FirebaseAuth.getInstance();
if (currentUser != null) {
currentUserId = currentUser.getUid();
bookButton = findViewById(R.id.book_button);
messageButton = findViewById(R.id.messageButton);
imageSliderViewPager = findViewById(R.id.imageSliderViewPager);
sliderDotsPanel = findViewById(R.id.dotsLayout2);
imageSliderViewPager, sliderDotsPanel);
imageSliderViewPager.setAdapter(imageSliderAdapter);
imageSliderAdapter.updateDotsIndicator(0);
imageSliderViewPager.registerOnPageChangeCallback(new
ViewPager2.OnPageChangeCallback() {
@Override
super.onPageSelected(position);
imageSliderAdapter.updateDotsIndicator(position);
});
@Override
intent.putExtra("hotelKey", hotelId);
startActivity(intent);
});
mapButton.setOnClickListener(new View.OnClickListener() {
@Override
navigateToMap(hotelId);
});
queryHotelUserId(hotelId);
retrieveHotelUserName(hotelId);
retrieveCurrentUserName(currentUserId);
messageButton.setOnClickListener(new View.OnClickListener() {
@Override
intent.putExtra("recipientUserId", hotelUserId);
intent.putExtra("recipientUserName", recepientName);
intent.putExtra("currentUserName", currentUserName);
recepientName);
currentUserName);
startActivity(intent);
});
retrieve(hotelId);
intent.putExtra("hotelId", hotelId);
startActivity(intent);
TextView cancellationPolicyTV =
findViewById(R.id.cancellationPolicyTextView);
DatabaseReference databaseReference =
FirebaseDatabase.getInstance().getReference();
hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
String hotelAddress =
dataSnapshot.child("address").getValue(String.class);
String amenities =
dataSnapshot.child("amenities").getValue(String.class);
String description =
dataSnapshot.child("description").getValue(String.class);
String hotelContact =
dataSnapshot.child("contact").getValue(String.class);
String cancellationPolicy =
dataSnapshot.child("cancellationPolicy").getValue(String.class);
hotelNameTV.setText(title);
amenitiesTV.setText(amenities);
hotelAddressTV.setText(hotelAddress);
hotelContactTV.setText(hotelContact);
hotelEmailTV.setText(hotelEmail);
cancellationPolicyTV.setText(cancellationPolicy);
imageUris.clear();
imageUris.add(uri);
imageSliderAdapter.setImageUris(imageUris);
imageSliderAdapter.notifyDataSetChanged();
@Override
databaseError.getMessage());
});
FirebaseDatabase.getInstance().getReference().child("hotels").child(hotelId);
hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
hotelUserId = dataSnapshot.child("user_id").getValue(String.class);
@Override
});
DatabaseReference hotelRef =
FirebaseDatabase.getInstance().getReference().child("hotels").child(hotelId);
hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
hotelUserId = dataSnapshot.child("user_id").getValue(String.class);
retrieveHotelName(hotelUserId);
@Override
databaseError.getMessage());
});
DatabaseReference usersRef =
FirebaseDatabase.getInstance().getReference().child("users").child("Hotel").child(hot
elUserId);
usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
recepientName = dataSnapshot.child("name").getValue(String.class);
@Override
databaseError.getMessage());
});
DatabaseReference usersRef =
FirebaseDatabase.getInstance().getReference().child("users").child("Tourist").child(c
urrentUserId);
usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
currentUserName = dataSnapshot.child("name").getValue(String.class);
@Override
databaseError.getMessage());
});
onBackPressed();
gcashDepositNumberET, adultsNumberPicker;
Object timestamp;
ImageView imageView;
TextView textView;
@Override
setContentView(R.layout.activity_book_form);
etc
DatabaseReference databaseReference =
FirebaseDatabase.getInstance().getReference();
DatabaseReference roomPreferencesRef =
databaseReference.child("hotels").child(hotelId).child("roomTypes");
fullNameET = findViewById(R.id.fullNameET);
contactNumberET = findViewById(R.id.contactNumberET);
emailET = findViewById(R.id.emailET);
submitButton = findViewById(R.id.submitButton);
roomPreferenceSpinner = findViewById(R.id.roomPreferenceSpinner);
checkInDateET = findViewById(R.id.checkInDateET);
checkOutDateET = findViewById(R.id.checkOutDateET);
yourGcashNameET = findViewById(R.id.yourGcashNameET);
yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
referenceNumberET = findViewById(R.id.referenceNumberET);
attachedImageView = findViewById(R.id.attachedImageView);
reservefeeET = findViewById(R.id.reservefeeET);
imageView = findViewById(R.id.copyImageView);
textView = findViewById(R.id.gcashDepositNumberET);
alertDialog.dismiss();
imageView.setOnClickListener(new View.OnClickListener() {
@Override
getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData =
ClipData.newPlainText("Copy",textView.getText().toString());
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(BookForm.this, "Copied",
Toast.LENGTH_SHORT).show();
});
android.R.layout.simple_spinner_item, roomTypeList);
roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dro
pdown_item);
roomPreferenceSpinner.setAdapter(roomTypeAdapter);
adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
selectedCheckInDate = Calendar.getInstance();
showDatePickerDialog(selectedCheckInDate, Calendar.getInstance());
});
checkOutDateET.setOnClickListener(v -> {
selectedCheckOutDate = Calendar.getInstance();
showDatePickerDialog(selectedCheckOutDate, selectedCheckInDate);
});
roomPreferencesRef.addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
roomTypeList.clear();
roomTypeList.add(roomPreference);
roomTypeAdapter.notifyDataSetChanged();
@Override
gcashDepositNameET = findViewById(R.id.gcashDepositNameET);
gcashDepositNumberET = findViewById(R.id.gcashDepositNumberET);
reservefeeET = findViewById(R.id.reservefeeET);
hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (hotelSnapshot.exists()) {
String gcashNumber =
hotelSnapshot.child("gcashNumber").getValue(String.class);
String gcashName =
hotelSnapshot.child("gcashName").getValue(String.class);
String resrevefee =
hotelSnapshot.child("reservationFee").getValue(String.class);
gcashDepositNumberET.setText(gcashNumber);
gcashDepositNameET.setText(gcashName);
reservefeeET.setText(resrevefee);
} else {
Log.e("BookForm", "gcashDepositNameET or
gcashDepositNumberET is null");
} else {
@Override
databaseError.getMessage());
});
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
if (allFields()) {
if (currentUser != null) {
if (enteredEmail.equals(registeredEmail)) {
ProgressBar loadingProgressBar =
findViewById(R.id.loadingProgressBar);
submitButton.setVisibility(View.GONE);
loadingProgressBar.setVisibility(View.VISIBLE);
@Override
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
return null;
@Override
loadingProgressBar.setVisibility(View.GONE);
submitButton.setVisibility(View.VISIBLE);
int adults =
Integer.parseInt(adultsNumberPicker.getText().toString());
int children =
Integer.parseInt(childrenNumberPicker.getText().toString());
String contactNumber =
contactNumberET.getText().toString();
String roomPreference =
roomPreferenceSpinner.getSelectedItem().toString();
yourGcashNameET.getText().toString();
String yourGcashNumber =
yourGcashNumberET.getText().toString();
String referenceNumber =
referenceNumberET.getText().toString();
checkOutDate, adults,
finish();
}.execute();
} else {
} else {
} else {
Toast.LENGTH_SHORT).show();
});
attachPhotoButton.setOnClickListener(new View.OnClickListener() {
@Override
openFileChooser();
});
termsPaymentTextView.setOnClickListener(new View.OnClickListener() {
@Override
showTermsDialog();
});
if (adultCount < 9) {
adultCount++;
updateAdultsCount();
adultCount--;
updateAdultsCount();
adultsNumberPicker.setText(String.valueOf(adultCount));
if (childrenCount < 9) {
childrenCount++;
updateChildrenCount();
if (childrenCount > 0) {
childrenCount--;
updateChildrenCount();
childrenNumberPicker.setText(String.valueOf(childrenCount));
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, PICK_IMAGE_REQUEST);
@Override
selectedImageUri = data.getData();
attachedImageView.setImageURI(selectedImageUri);
attachedImageView.setVisibility(View.VISIBLE);
minDate) {
BookForm.this,
currentDate.set(Calendar.HOUR_OF_DAY, 0);
currentDate.set(Calendar.MINUTE, 0);
currentDate.set(Calendar.MILLISECOND, 0);
if (!selectedDate.before(currentDate)) {
updateDateField(selectedDate);
} else {
Toast.LENGTH_SHORT).show();
},
selectedDate.get(Calendar.YEAR),
selectedDate.get(Calendar.MONTH),
selectedDate.get(Calendar.DAY_OF_MONTH)
);
datePickerDialog.getDatePicker().setMinDate(minDate.getTimeInMillis());
datePickerDialog.show();
Locale.getDefault());
if (selectedDate.equals(selectedCheckInDate)) {
checkInDateET.setText(dateFormat.format(selectedDate.getTime()));
} else if (selectedDate.equals(selectedCheckOutDate)) {
checkOutDateET.setText(dateFormat.format(selectedDate.getTime()));
!contactNumberET.getText().toString().isEmpty() &&
!emailET.getText().toString().isEmpty() &&
!checkInDateET.getText().toString().isEmpty() &&
!checkOutDateET.getText().toString().isEmpty() &&
!roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
!yourGcashNameET.getText().toString().isEmpty() &&
!yourGcashNumberET.getText().toString().isEmpty() &&
!referenceNumberET.getText().toString().isEmpty() &&
selectedImageUri != null;
String roomPreference,
referenceNumber) {
DatabaseReference databaseReference =
FirebaseDatabase.getInstance().getReference();
DatabaseReference userBookingsRef =
databaseReference.child("booking_info");
eEvent(new ValueEventListener() {
@Override
String existingCheckInDate =
bookingSnapshot.child("checkInDate").getValue(String.class);
String existingCheckOutDate =
bookingSnapshot.child("checkOutDate").getValue(String.class);
try {
existingCheckIn = sdf.parse(existingCheckInDate);
existingCheckOut = sdf.parse(existingCheckOutDate);
} catch (ParseException e) {
e.printStackTrace();
existingCheckIn.before(existingCheckOut) ||
existingCheckIn.after(existingCheckOut) &&
existingCheckIn.after(existingCheckIn))) {
canSubmit = false;
break;
canSubmit = false;
break;
if (canSubmit) {
} else {
@Override
});
end2) {
try {
} catch (ParseException e) {
e.printStackTrace();
return false;
roomPreference,
FirebaseDatabase.getInstance().getReference();
DatabaseReference hotelRef =
databaseReference.child("hotels").child(hotelId).child("user_id");
hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (hotelDataSnapshot.exists()) {
DatabaseReference bookingsRef =
databaseReference.child("booking_info").push();
bookingsRef.child("isConfirmed").setValue(false);
bookingsRef.child("isPending").setValue(true);
bookingsRef.child("isDeclined").setValue(false);
bookingsRef.child("userId").setValue(userId);
bookingsRef.child("fullName").setValue(fullName);
bookingsRef.child("checkInDate").setValue(checkInDate);
bookingsRef.child("checkOutDate").setValue(checkOutDate);
bookingsRef.child("adults").setValue(adults);
bookingsRef.child("children").setValue(children);
bookingsRef.child("contactNumber").setValue(contactNumber);
bookingsRef.child("roomPreference").setValue(roomPreference);
bookingsRef.child("GcashName").setValue(yourGcashName);
bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
bookingsRef.child("referenceNumber").setValue(referenceNumber);
bookingsRef.child("hotelUserId").setValue(hotelUserId);
bookingsRef.child("timestamp").setValue(ServerValue.TIMESTAMP);
if (selectedImageUri != null) {
} else {
Toast.LENGTH_SHORT).show();
@Override
hotelDatabaseError.getMessage());
});
StorageReference storageReference =
FirebaseStorage.getInstance().getReference();
imageRef.putFile(selectedImageUri)
.addOnSuccessListener(taskSnapshot -> {
imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
bookingsRef.child("imageUrl").setValue(imageUrl);
successfully.");
Toast.LENGTH_SHORT).show();
});
})
.addOnFailureListener(e -> {
Toast.LENGTH_SHORT).show();
});
builder.setView(customView);
AppCompatButton understandButton =
customView.findViewById(R.id.understandButton);
understandButton.setOnClickListener(new View.OnClickListener() {
@Override
alertDialog.dismiss();
});
alertDialog.show();
return alertDialog;
onBackPressed();
@Override
Bundle savedInstanceState) {
name = view.findViewById(R.id.tv_name);
email = view.findViewById(R.id.tv_email);
profilepic = view.findViewById(R.id.iv_profilepic);
logout = view.findViewById(R.id.logout_button);
pendingbtn = view.findViewById(R.id.pendingbtn);
currentbtn = view.findViewById(R.id.currentbtn);
expiredbtn = view.findViewById(R.id.expiredbtn);
declinedbtn = view.findViewById(R.id.declinedbtn);
retrieveAndDisplayUserInfo();
picButton = view.findViewById(R.id.pic_Button);
picButton.setOnClickListener(new View.OnClickListener() {
@Override
onSelectProfilePictureClick(v);
});
logout.setOnClickListener(new View.OnClickListener() {
@Override
});
expiredbtn.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
currentbtn.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
pendingbtn.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
declinedbtn.setOnClickListener(new View.OnClickListener() {
startActivity(intent);
});
tutorialsbtnView.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
termsTextView.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
privacyTextView.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
contactTextView.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
return view;
intent.setType("image/*");
startActivityForResult(intent, 1);
@Override
data) {
uploadProfilePictureToStorage(imageUri);
StorageReference profilePicsRef =
storageRef.child("profile_pictures").child(userId);
uploadTask.addOnSuccessListener(taskSnapshot -> {
profilePicsRef.getDownloadUrl().addOnSuccessListener(uri -> {
saveProfilePictureUrlToFirebase(profilePictureUrl);
});
});
DatabaseReference userRef =
FirebaseDatabase.getInstance().getReference("users").child("Tourist").child(userId);
userData.put("profilePictureUrl", profilePictureUrl);
userRef.updateChildren(userData).addOnSuccessListener(aVoid -> {
}).addOnFailureListener(e -> {
});
DatabaseReference userRef =
FirebaseDatabase.getInstance().getReference("users");
userRef.child("Tourist").child(userId).addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
if (snapshot.exists()) {
String profilePictureUrl =
snapshot.child("profilePictureUrl").getValue(String.class);
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
name.setText(nameValue);
Picasso.get().load(profilePictureUrl).into(profilepic);
});
@Override
});
FirebaseAuth.getInstance().signOut();
startActivity(intent);
getActivity().finish();
})
.show();
public PendingHotelFragment() {
@Override
savedInstanceState) {
emptyStateLayout = view.findViewById(R.id.emptyStateLayout);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
retrievePendingBookings(currentUserId);
} else {
return view;
DatabaseReference bookingInfoRef =
FirebaseDatabase.getInstance().getReference().child("booking_info");
bookingInfoRef.orderByChild("userId").equalTo(currentUserId)
.addValueEventListener(new ValueEventListener() {
@Override
pendingBookingsList.clear();
bookingSnapshot.child("userId").getValue(String.class);
String fullName =
bookingSnapshot.child("fullName").getValue(String.class);
String checkInDate =
bookingSnapshot.child("checkInDate").getValue(String.class);
String checkOutDate =
bookingSnapshot.child("checkOutDate").getValue(String.class);
boolean isPending =
bookingSnapshot.child("isPending").getValue(Boolean.class);
if (isPending) {
bookingInfo.setBookingId(bookingKey);
bookingInfo.setFullName(fullName);
bookingInfo.setCheckInDate(checkInDate);
bookingInfo.setCheckOutDate(checkOutDate);
pendingBookingsList.add(bookingInfo);
+ bookingInfo);
if (!pendingBookingsList.isEmpty()) {
updateEmptyStateVisibility();
adapter.notifyDataSetChanged();
@Override
databaseError.getMessage());
});
if (pendingBookingsList.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyStateLayout.setVisibility(View.VISIBLE);
} else {
emptyStateLayout.setVisibility(View.GONE);
public ConfirmedHotelFragment() {
@Override
savedInstanceState) {
false);
emptyStateLayout = view.findViewById(R.id.emptyStateLayout);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
requireActivity());
recyclerView.setAdapter(adapter);
if (currentUser != null) {
retrieveConfirmedBookings(currentUserId);
} else {
return view;
DatabaseReference bookingInfoRef =
FirebaseDatabase.getInstance().getReference().child("booking_info");
bookingInfoRef.orderByChild("userId").equalTo(currentUserId)
.addValueEventListener(new ValueEventListener() {
@Override
confirmedBookingsList.clear();
bookingSnapshot.child("userId").getValue(String.class);
String fullName =
bookingSnapshot.child("fullName").getValue(String.class);
String checkInDate =
bookingSnapshot.child("checkInDate").getValue(String.class);
String checkOutDate =
bookingSnapshot.child("checkOutDate").getValue(String.class);
boolean isConfirmed =
bookingSnapshot.child("isConfirmed").getValue(Boolean.class);
if (isConfirmed) {
bookingInfo.setBookingId(bookingKey);
bookingInfo.setFullName(fullName);
bookingInfo.setCheckInDate(checkInDate);
bookingInfo.setCheckOutDate(checkOutDate);
confirmedBookingsList.add(bookingInfo);
updateEmptyStateVisibility();
@Override
});
if (confirmedBookingsList.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyStateLayout.setVisibility(View.VISIBLE);
} else {
recyclerView.setVisibility(View.VISIBLE);
emptyStateLayout.setVisibility(View.GONE);
public ConfirmedHotelFragment() {
@Override
savedInstanceState) {
false);
emptyStateLayout = view.findViewById(R.id.emptyStateLayout);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
requireActivity());
recyclerView.setAdapter(adapter);
if (currentUser != null) {
retrieveConfirmedBookings(currentUserId);
} else {
DatabaseReference bookingInfoRef =
FirebaseDatabase.getInstance().getReference().child("booking_info");
bookingInfoRef.orderByChild("userId").equalTo(currentUserId)
.addValueEventListener(new ValueEventListener() {
@Override
confirmedBookingsList.clear();
String userId =
bookingSnapshot.child("userId").getValue(String.class);
String fullName =
bookingSnapshot.child("fullName").getValue(String.class);
String checkInDate =
bookingSnapshot.child("checkInDate").getValue(String.class);
String checkOutDate =
bookingSnapshot.child("checkOutDate").getValue(String.class);
bookingSnapshot.child("isConfirmed").getValue(Boolean.class);
if (isConfirmed) {
bookingInfo.setBookingId(bookingKey);
bookingInfo.setFullName(fullName);
bookingInfo.setCheckInDate(checkInDate);
bookingInfo.setCheckOutDate(checkOutDate);
confirmedBookingsList.add(bookingInfo);
updateEmptyStateVisibility();
adapter.notifyDataSetChanged();
@Override
});
if (confirmedBookingsList.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyStateLayout.setVisibility(View.VISIBLE);
} else {
recyclerView.setVisibility(View.VISIBLE);
emptyStateLayout.setVisibility(View.GONE);
public DeclinedHotelFragment() {
@Override
savedInstanceState) {
emptyStateLayout = view.findViewById(R.id.emptyStateLayout);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
if (currentUser != null) {
retrieveConfirmedBookings(currentUserId);
} else {
return view;
DatabaseReference bookingInfoRef =
FirebaseDatabase.getInstance().getReference().child("booking_info");
bookingInfoRef.orderByChild("userId").equalTo(currentUserId)
.addValueEventListener(new ValueEventListener() {
@Override
declinedBookingsList.clear();
String userId =
bookingSnapshot.child("userId").getValue(String.class);
String fullName =
bookingSnapshot.child("fullName").getValue(String.class);
String checkInDate =
bookingSnapshot.child("checkInDate").getValue(String.class);
String checkOutDate =
bookingSnapshot.child("checkOutDate").getValue(String.class);
boolean isDeclined =
bookingSnapshot.child("isDeclined").getValue(Boolean.class);
if (isDeclined) {
bookingInfo.setBookingId(bookingKey);
bookingInfo.setFullName(fullName);
bookingInfo.setCheckInDate(checkInDate);
bookingInfo.setCheckOutDate(checkOutDate);
declinedBookingsList.add(bookingInfo);
updateEmptyStateVisibility();
adapter.notifyDataSetChanged();
@Override
});
if (declinedBookingsList.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyStateLayout.setVisibility(View.VISIBLE);
} else {
recyclerView.setVisibility(View.VISIBLE);
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tutorials);
loadYouTubeVideo(webView1,
"https://www.youtube.com/embed/M4TCYzsu2vU?si=uTX5DB9DYWY2C9fl");
loadYouTubeVideo(webView2,
"https://www.youtube.com/embed/RsQCArTlcJU?si=ovL-LLeL_gY7hXmi");
loadYouTubeVideo(webView3,
"https://www.youtube.com/embed/yp0_bIJChsQ?si=NjEQCRG-R036DNsU");
gvvJLUPY?si=T-BrsZsGSEiXliJq");
loadYouTubeVideo(webView5, "https://www.youtube.com/embed/3Yd-
pI9jR7c?si=P4Li0yDrxZAKGXUE");
loadYouTubeVideo(webView5,
"https://www.youtube.com/embed/_ElZZHFxo0E?si=kuLu8TK75L0wz27n");
videoUrl +
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
TextView tvClickableLink;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_hotel);
viewPager = findViewById(R.id.viewPager);
dotsLayout = findViewById(R.id.dotsLayout);
uploadButton = findViewById(R.id.uploadButton);
hotelNameET = findViewById(R.id.hotelNameET);
hotelAddET = findViewById(R.id.hotelAddET);
hotelDescET = findViewById(R.id.hotelDescET);
hotelContactET = findViewById(R.id.hotelContactET);
hotelEmailET = findViewById(R.id.hotelEmailET);
roomTypeET = findViewById(R.id.roomtypeET);
amenityET = findViewById(R.id.amenityET);
cancellationPolicyET = findViewById(R.id.cancellationPolicyET);
gcashNumberET = findViewById(R.id.gcashNumber);
gcashNameET = findViewById(R.id.gcashName);
reservationFeeET = findViewById(R.id.reservationFeeET);
postButton = findViewById(R.id.postButton);
cancelButton = findViewById(R.id.cancelButton);
tvClickableLink = findViewById(R.id.tvClickableLink);
tvClickableLink.setMovementMethod(LinkMovementMethod.getInstance());
roomTypeRecyclerView = findViewById(R.id.roomTypesRecyclerView);
RoomTypeAdapter.OnRoomTypeDeleteListener() {
@Override
getHotelId(new HotelIdCallback() {
@Override
if (hotelId != null) {
DatabaseReference hotelRef =
databaseReference.child("hotels").child(hotelId);
hotelRef.child("roomTypes").addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
dataSnapshot) {
if (dataSnapshot.exists()) {
dataSnapshot.getChildren()) {
String existingRoomType =
roomTypeSnapshot.getValue(String.class);
if (!roomType.equals(existingRoomType)) {
currentRoomTypes.add(existingRoomType);
currentRoomTypes);
@Override
databaseError) {
databaseError.getMessage());
});
} else {
});
});
roomTypeRecyclerView.setLayoutManager(new LinearLayoutManager(this));
roomTypeRecyclerView.setAdapter(roomTypeAdapter);
roomTypeET = findViewById(R.id.roomtypeET);
addRoomTypeBtn.setOnClickListener(v -> {
roomTypes.add(roomType);
roomTypeAdapter.notifyDataSetChanged();
roomTypeET.setText("");
});
userId = currentUser.getUid();
storageReference = storage.getReference();
databaseReference = database.getReference();
dotsLayout);
viewPager.setAdapter(adapter);
dotsLayout = findViewById(R.id.dotsLayout);
viewPager.setAdapter(adapter);
viewPager.registerOnPageChangeCallback(new
ViewPager2.OnPageChangeCallback() {
super.onPageSelected(position);
adapter.updateDotsIndicator(position);
});
adapter.updateDotsIndicator(0);
galleryLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
imageUri = data.getData();
imageUris.add(imageUri);
adapter.notifyDataSetChanged();
);
postButton.setOnClickListener(v -> {
Double.parseDouble(longitude));
intent.putExtra("fragmentToLoad", "HotelEditFragment");
startActivity(intent);
});
retrieve(userId);
addDotsIndicator(0);
ViewPager2.OnPageChangeCallback() {
@Override
super.onPageSelected(position);
addDotsIndicator(position);
});
String hotelDescription,
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
// pag nag-eexist na, mag uupdate nalang yung existing data instead na
gumawa ng new
com.google.firebase.database.DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
String existingHotelId =
dataSnapshot.getChildren().iterator().next().getKey();
adapter.setUris(imageUris);
adapter.notifyDataSetChanged();
} else {
hotelEmail, roomTypes,
adapter.setUris(imageUris);
adapter.notifyDataSetChanged();
@Override
});
longitude) {
uploadTask.addOnFailureListener(new MyFailureListener());
uploadTask.addOnSuccessListener(taskSnapshot -> {
OnCompleteListener<Uri>() {
@Override
task.getResult().getEncodedPath() + "?alt=media&token=" +
task.getResult().getQueryParameters("token").get(0);
imageUrls.add(url);
if (uploadCount.incrementAndGet() == imageUris.size()) {
hotelDescription, hotelContact,
adapter.setUris(imageUris);
adapter.notifyDataSetChanged();
});
}).addOnFailureListener(e -> {
e.getMessage());
});
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
com.google.firebase.database.DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
dataSnapshot.getChildren()) {
hotelRef.child("name").setValue(hotelName);
hotelRef.child("address").setValue(hotelAddress);
hotelRef.child("description").setValue(hotelDescription);
hotelRef.child("contact").setValue(hotelContact);
hotelRef.child("email").setValue(hotelEmail);
hotelRef.child("amenities").setValue(amenitiesHotel);
hotelRef.child("gcashNumber").setValue(gcashNumber);
hotelRef.child("gcashName").setValue(gcashName);
hotelRef.child("reservationFee").setValue(reservationFee);
hotelRef.child("latitude").setValue(latitude);
hotelRef.child("longitude").setValue(longitude);
saveRoomTypes(hotelId, roomTypes);
if (!imageUris.isEmpty()) {
if (imageUri != null) {
if (fileExists(imageUri)) {
StorageReference imageRef =
uploadTask.addOnSuccessListener(taskSnapshot -> {
imageUrls.add(imageUrl);
if (uploadCount.incrementAndGet() ==
imageUris.size()) {
hotelDescription, hotelContact,
latch.countDown();
}).addOnFailureListener(e -> {
e.getMessage());
latch.countDown();
});
}).addOnFailureListener(e -> {
e.getMessage());
latch.countDown();
});
} else {
imageUri.toString());
latch.countDown();
} else {
latch.countDown();
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
} else {
hotelContact,
@Override
});
if (uri != null) {
return file.exists();
return false;
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
galleryLauncher.launch(galleryIntent);
cancellationPolicy,
hotelRef.child("name").setValue(hotelName);
hotelRef.child("address").setValue(hotelAddress);
hotelRef.child("description").setValue(hotelDescription);
hotelRef.child("contact").setValue(hotelContact);
hotelRef.child("email").setValue(hotelEmail);
hotelRef.child("cancellationPolicy").setValue(cancellationPolicy);
hotelRef.child("user_id").setValue(userId);
hotelRef.child("amenities").setValue(amenitiesHotel);
hotelRef.child("gcashNumber").setValue(gcashNumber);
hotelRef.child("gcashName").setValue(gcashName);
hotelRef.child("reservationFee").setValue(reservationFee);
hotelRef.child("latitude").setValue(latitude);
hotelRef.child("longitude").setValue(longitude);
hotelRef.child("images").setValue(imagesMap);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
DataSnapshot hotelSnapshot =
dataSnapshot.getChildren().iterator().next();
String hotelAddress =
hotelSnapshot.child("address").getValue(String.class);
String description =
hotelSnapshot.child("description").getValue(String.class);
String hotelContact =
hotelSnapshot.child("contact").getValue(String.class);
String cancellationPolicy =
hotelSnapshot.child("cancellationPolicy").getValue(String.class);
String amenitiesHotel =
hotelSnapshot.child("amenities").getValue(String.class);
hotelSnapshot.child("gcashNumber").getValue(String.class);
String gcashName =
hotelSnapshot.child("gcashName").getValue(String.class);
String reservationfee =
hotelSnapshot.child("reservationFee").getValue(String.class);
Double latitudeDouble =
hotelSnapshot.child("latitude").getValue(Double.class);
Double longitudeDouble =
hotelSnapshot.child("longitude").getValue(Double.class);
"defaultLatitude";
longitudeDouble.toString() : "defaultLongitude";
roomTypesSnapshot.getChildren()) {
imageUrls.add(imageUrl);
hotelNameET.setText(title);
hotelDescET.setText(description);
hotelAddET.setText(hotelAddress);
hotelContactET.setText(hotelContact);
hotelEmailET.setText(hotelEmail);
cancellationPolicyET.setText(cancellationPolicy);
amenityET.setText(amenitiesHotel);
gcashNumberET.setText(gcashNumber);
gcashNameET.setText(gcashName);
reservationFeeET.setText(reservationfee);
latitudeET.setText(String.valueOf(latitude));
longitudeET.setText(String.valueOf(longitude));
imageUris.add(Uri.parse(imageUrl));
adapter.notifyDataSetChanged();
roomTypeAdapter.setRoomTypes(roomTypes);
roomTypeAdapter.notifyDataSetChanged();
@Override
});
dotsLayout.removeAllViews();
dots[i].setImageDrawable(ContextCompat.getDrawable(this,
R.drawable.dots_unselected));
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
params.setMargins(8, 0, 8, 0);
if (dots.length > 0) {
dots[position].setImageDrawable(ContextCompat.getDrawable(this,
R.drawable.dots_selected));
DatabaseReference roomTypesRef =
databaseReference.child("hotels").child(hotelId).child("roomTypes");
if (roomTypes != null) {
if (roomType != null) {
roomTypesRef.child("roomType" + (i + 1)).setValue(roomType);
getHotelId(new HotelIdCallback() {
@Override
if (hotelId != null) {
databaseReference.child("hotels").child(hotelId);
hotelRef.child("roomTypes").addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
dataSnapshot.getChildren()) {
String existingRoomType =
roomTypeSnapshot.getValue(String.class);
if (!roomType.equals(existingRoomType)) {
currentRoomTypes.add(existingRoomType);
updateRoomTypesInDatabase(hotelRef, currentRoomTypes);
@Override
});
} else {
});
List<String> roomTypes) {
hotelRef.child("roomTypes").removeValue();
hotelRef.child("roomTypes").updateChildren(roomTypesMap);
if (currentUser != null) {
DatabaseReference hotelRef =
FirebaseDatabase.getInstance().getReference("hotels");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
callback.onHotelIdReceived(hotelId);
} else {
callback.onHotelIdReceived(null);
@Override
});
} else {
callback.onHotelIdReceived(null);
onBackPressed();
@Override
savedInstanceState) {
tabLayout.addTab(tabLayout.newTab().setText("New"));
tabLayout.addTab(tabLayout.newTab().setText("Confirmed"));
tabLayout.addTab(tabLayout.newTab().setText("Declined"));
replaceFragment(new NewRestoNotifFragment());
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
switch (tab.getPosition()) {
case 0:
replaceFragment(new NewRestoNotifFragment());
break;
case 1:
replaceFragment(new ConfirmedRestoNotifFragment());
break;
case 2:
replaceFragment(new DeclinedRestoNotifFragment());
@Override
@Override
});
return view;
FragmentTransaction transaction =
getChildFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, fragment);
transaction.addToBackStack(null);
transaction.commit();
public NewRestoNotifFragment() {
@Override
savedInstanceState) {
false);
loadingProgressBar = view.findViewById(R.id.loadingProgressBar);
emptyStateLayout = view.findViewById(R.id.emptyStateLayout);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
recyclerView.setAdapter(adapter);
FirebaseDatabase.getInstance().getReference().child("restaurants");
reservationRef =
FirebaseDatabase.getInstance().getReference().child("reservation_info");
loadingProgressBar.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
retrieveCurrentRestoUserId();
return view;
if (currentUser != null) {
Query query =
restaurantsRef.orderByChild("user_id").equalTo(currentUserId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
DataSnapshot restaurantSnapshot =
dataSnapshot.getChildren().iterator().next();
currentRestoUserId =
restaurantSnapshot.child("user_id").getValue(String.class);
currentRestoUserId);
if (currentRestoUserId != null) {
retrieveReservationInformation(currentRestoUserId);
} else {
@Override
databaseError.getMessage());
});
} else {
currentRestoUserId);
Query query =
reservationRef.orderByChild("restoUserId").equalTo(currentRestoUserId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
newRestoNotifList.clear();
boolean isPending =
reservationSnapshot.child("isPending").getValue(Boolean.class);
if (isPending) {
String userName =
reservationSnapshot.child("userName").getValue(String.class);
String fullName =
reservationSnapshot.child("fullName").getValue(String.class);
reservationSnapshot.child("contactNumber").getValue(String.class);
String email =
reservationSnapshot.child("email").getValue(String.class);
Integer customers =
reservationSnapshot.child("customers").getValue(Integer.class);
String userId =
reservationSnapshot.child("userId").getValue(String.class);
String yGcashNumber =
reservationSnapshot.child("yGcashNumber").getValue(String.class);
String GcashName =
reservationSnapshot.child("GcashName").getValue(String.class);
String imageUrl =
reservationSnapshot.child("imageUrl").getValue(String.class);
String reservationDate =
reservationSnapshot.child("reservationDate").getValue(String.class);
String referenceNumber =
reservationSnapshot.child("referenceNumber").getValue(String.class);
String restoUserId =
reservationSnapshot.child("restoUserId").getValue(String.class);
String declineReason =
reservationSnapshot.child("declineReason").getValue(String.class);
imageUrl, declineReason);
newRestoNotifList.add(model);
loadingProgressBar.setVisibility(View.GONE);
updateEmptyStateVisibility();
} else {
loadingProgressBar.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
@Override
databaseError.getMessage());
});
newRestoNotifList.clear();
newRestoNotifList.addAll(updatedData);
adapter.notifyDataSetChanged();
return newRestoNotifList;
if (newRestoNotifList.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyStateLayout.setVisibility(View.VISIBLE);
} else {
recyclerView.setVisibility(View.VISIBLE);
emptyStateLayout.setVisibility(View.GONE);
public ConfirmedRestoNotifFragment() {
@Override
savedInstanceState) {
container, false);
loadingProgressBar = view.findViewById(R.id.loadingProgressBar);
emptyStateLayout = view.findViewById(R.id.emptyStateLayout);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
recyclerView.setAdapter(adapter);
restaurantsRef =
FirebaseDatabase.getInstance().getReference().child("restaurants");
reservationRef =
FirebaseDatabase.getInstance().getReference().child("reservation_info");
loadingProgressBar.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
retrieveCurrentRestoUserId();
return view;
if (currentUser != null) {
restaurantsRef.orderByChild("user_id").equalTo(currentUserId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
DataSnapshot restaurantSnapshot =
dataSnapshot.getChildren().iterator().next();
currentRestoUserId =
restaurantSnapshot.child("user_id").getValue(String.class);
currentRestoUserId);
if (currentRestoUserId != null) {
retrieveReservationInformation(currentRestoUserId);
} else {
@Override
databaseError.getMessage());
});
} else {
currentRestoUserId);
Query query =
reservationRef.orderByChild("restoUserId").equalTo(currentRestoUserId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
confirmedRestoNotifList.clear();
boolean isConfirmed =
reservationSnapshot.child("isConfirmed").getValue(Boolean.class);
if (isConfirmed) {
String userName =
reservationSnapshot.child("userName").getValue(String.class);
String fullName =
reservationSnapshot.child("fullName").getValue(String.class);
String contactNumber =
reservationSnapshot.child("contactNumber").getValue(String.class);
String email =
reservationSnapshot.child("email").getValue(String.class);
Integer customers =
reservationSnapshot.child("customers").getValue(Integer.class);
String userId =
reservationSnapshot.child("userId").getValue(String.class);
String yGcashNumber =
reservationSnapshot.child("yGcashNumber").getValue(String.class);
String GcashName =
reservationSnapshot.child("GcashName").getValue(String.class);
String imageUrl =
reservationSnapshot.child("imageUrl").getValue(String.class);
String reservationDate =
reservationSnapshot.child("reservationDate").getValue(String.class);
String referenceNumber =
reservationSnapshot.child("referenceNumber").getValue(String.class);
String restoUserId =
reservationSnapshot.child("restoUserId").getValue(String.class);
reservationSnapshot.child("declineReason").getValue(String.class);
imageUrl, declineReason);
confirmedRestoNotifList.add(model);
loadingProgressBar.setVisibility(View.GONE);
updateEmptyStateVisibility();
} else {
loadingProgressBar.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
@Override
databaseError.getMessage());
});
confirmedRestoNotifList.clear();
confirmedRestoNotifList.addAll(updatedData);
adapter.notifyDataSetChanged();
return confirmedRestoNotifList;
if (confirmedRestoNotifList.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyStateLayout.setVisibility(View.VISIBLE);
} else {
emptyStateLayout.setVisibility(View.GONE);
public DeclinedRestoNotifFragment() {
@Override
savedInstanceState) {
false);
emptyStateLayout = view.findViewById(R.id.emptyStateLayout);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
recyclerView.setAdapter(adapter);
restaurantsRef =
FirebaseDatabase.getInstance().getReference().child("restaurants");
reservationRef =
FirebaseDatabase.getInstance().getReference().child("reservation_info");
loadingProgressBar.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
retrieveCurrentRestoUserId();
return view;
if (currentUser != null) {
Query query =
restaurantsRef.orderByChild("user_id").equalTo(currentUserId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
DataSnapshot restaurantSnapshot =
dataSnapshot.getChildren().iterator().next();
currentRestoUserId =
restaurantSnapshot.child("user_id").getValue(String.class);
currentRestoUserId);
if (currentRestoUserId != null) {
retrieveReservationInformation(currentRestoUserId);
} else {
@Override
databaseError.getMessage());
});
} else {
currentRestoUserId);
Query query =
reservationRef.orderByChild("restoUserId").equalTo(currentRestoUserId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
declinedRestoNotifList.clear();
Boolean isDeclinedObject =
reservationSnapshot.child("isDeclined").getValue(Boolean.class);
if (isDeclined) {
String userName =
reservationSnapshot.child("userName").getValue(String.class);
String fullName =
reservationSnapshot.child("fullName").getValue(String.class);
String contactNumber =
reservationSnapshot.child("contactNumber").getValue(String.class);
String email =
reservationSnapshot.child("email").getValue(String.class);
Integer customers =
reservationSnapshot.child("customers").getValue(Integer.class);
String userId =
reservationSnapshot.child("userId").getValue(String.class);
String yGcashNumber =
reservationSnapshot.child("yGcashNumber").getValue(String.class);
reservationSnapshot.child("GcashName").getValue(String.class);
String imageUrl =
reservationSnapshot.child("imageUrl").getValue(String.class);
String reservationDate =
reservationSnapshot.child("reservationDate").getValue(String.class);
String referenceNumber =
reservationSnapshot.child("referenceNumber").getValue(String.class);
String restoUserId =
reservationSnapshot.child("restoUserId").getValue(String.class);
String declineReason =
reservationSnapshot.child("declineReason").getValue(String.class);
declinedRestoNotifList.add(model);
loadingProgressBar.setVisibility(View.GONE);
} else {
loadingProgressBar.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
@Override
databaseError.getMessage());
});
declinedRestoNotifList.clear();
declinedRestoNotifList.addAll(updatedData);
adapter.notifyDataSetChanged();
if (declinedRestoNotifList.isEmpty()) {
recyclerView.setVisibility(View.GONE);
emptyStateLayout.setVisibility(View.VISIBLE);
} else {
recyclerView.setVisibility(View.VISIBLE);
emptyStateLayout.setVisibility(View.GONE);
return declinedRestoNotifList;
@Override
Bundle savedInstanceState) {
currentUser = FirebaseAuth.getInstance().getCurrentUser();
chatHistoryRV = view.findViewById(R.id.chatRV);
chatHistoryRV.setAdapter(chatAdapter);
chatHistoryRV.setLayoutManager(new LinearLayoutManager(getContext()));
chatRoomsRef = FirebaseDatabase.getInstance().getReference("chat_rooms");
usersRef = FirebaseDatabase.getInstance().getReference("users");
retrieveChatRooms();
return view;
chatRoomsRef.addValueEventListener(new ValueEventListener() {
@Override
chatHistoryList.clear();
if (chatRoomId != null) {
isCurrentUserParticipant(chatSnapshot, chatRoomId);
@Override
});
chatRoomId) {
if (participantsSnapshot.hasChild(currentUser.getUid())) {
DatabaseReference messagesRef =
chatRoomsRef.child(chatRoomId).child("messages");
messagesRef.orderByChild("timestamp").limitToLast(1).addChildEventListener(new
ChildEventListener() {
@Override
if (chatModel != null) {
chatModel.setChatRoomId(chatRoomId);
lastMsgMap.put(receiverId, chatModel.getLastMessage());
chatModel.setReceiverId(receiverId);
chatModel.setSenderId(currentUser.getUid());
retrieveReceiverName(receiverId, chatModel);
chatAdapter.notifyDataSetChanged();
@Override
@Override
@Override
@Override
});
if (receiverId != null) {
ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
String receiverName =
dataSnapshot.child("recipientUserName").getValue(String.class);
if (receiverName != null) {
chatModel.setRecipientUserName(receiverName);
chatAdapter.notifyDataSetChanged();
@Override
});
} else {
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tourist_hotel_chat);
databaseReference = FirebaseDatabase.getInstance().getReference();
currentUser = FirebaseAuth.getInstance().getCurrentUser();
DynamicHotel at BookingDetail
recipientUserName = getIntent().getStringExtra("recipientUserName"); //
currentUserName = getIntent().getStringExtra("currentUserName");
chatRoomId = generateUniqueChatRoomId(currentUser.getUid(),
recipientUserId);
createChatRoom(chatRoomId);
messageRecyclerView = findViewById(R.id.messageRecyclerView);
layoutManager.setStackFromEnd(true);
messageRecyclerView.setLayoutManager(layoutManager);
messageRecyclerView.setAdapter(messageAdapter);
messageEditText = findViewById(R.id.messageEditText);
sendButton = findViewById(R.id.sendButton);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
});
listenForMessages(chatRoomId);
categoryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.child("Hotel").hasChild(recipientUserId)) {
retrieveRecipientName("Hotel", recipientUserId);
} else if (dataSnapshot.child("Tourist").hasChild(recipientUserId)) {
retrieveRecipientName("Tourist", recipientUserId);
} else if (dataSnapshot.child("Restaurant").hasChild(recipientUserId)) {
retrieveRecipientName("Restaurant", recipientUserId);
@Override
});
if (!messageText.isEmpty()) {
chatRoomRef.child(messageId).setValue(message);
messageEditText.setText("");
chatRoomRef.addChildEventListener(new ChildEventListener() {
@Override
if (message != null) {
messageList.add(message);
messageRecyclerView.scrollToPosition(messageList.size() - 1);
@Override
s) {
@Override
@Override
@Override
});
.filter(Objects::nonNull)
.sorted()
.collect(Collectors.joining("_"));
chatRoomRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (!dataSnapshot.exists()) {
participants.put(currentUser.getUid(), true);
participants.put(recipientUserId, true);
chatRoom.put("participants", participants);
if (chatRoom != null) {
chatRoomRef.setValue(chatRoom);
} else {
@Override
});
SimpleDateFormat("yyyyMMddHHmmssSSS", Locale.getDefault());
DatabaseReference recipientNameRef =
databaseReference.child(recipientNamePath);
recipientNameRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
TextView recipientNameTextView =
findViewById(R.id.recipientNameTextView);
recipientNameTextView.setText(recipientName);
@Override
});
onBackPressed();
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dynamic_hotel_map);
if (intent != null) {
if (hotelId != null) {
queryHotelDetails(hotelId);
} else {
Toast.LENGTH_SHORT).show();
DatabaseReference hotelRef =
FirebaseDatabase.getInstance().getReference().child("hotels").child(hotelId);
hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
if (dataSnapshot.exists()) {
double longitude =
dataSnapshot.child("longitude").getValue(Double.class);
@Override
databaseError.getMessage(), Toast.LENGTH_SHORT).show();
});
accurate. Please consider manually searching for the location if it's incorrect.");
@Override
directionFromCurrentMap(latitude, longitude);
});
@Override
dialog.dismiss();
finish();
});
builder.show();
destinationLongitude) {
startActivity(intent);
finish();
@Override
Bundle savedInstanceState) {
name = view.findViewById(R.id.tv_name);
email = view.findViewById(R.id.tv_email);
logout = view.findViewById(R.id.logout_button);
profilepic = view.findViewById(R.id.iv_profilepic);
retrieveAndDisplayUserInfo();
logout.setOnClickListener(new View.OnClickListener() {
logoutUser();
});
picButton.setOnClickListener(new View.OnClickListener() {
@Override
onSelectProfilePictureClick(v);
});
termsTextView.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
@Override
startActivity(intent);
});
contactTextView.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
tutorialsbtnView.setOnClickListener(new View.OnClickListener() {
@Override
});
return view;
intent.setType("image/*");
startActivityForResult(intent, 1);
@Override
data) {
uploadProfilePictureToStorage(imageUri);
storageRef.child("profile_pictures").child(userId);
uploadTask.addOnSuccessListener(taskSnapshot -> {
profilePicsRef.getDownloadUrl().addOnSuccessListener(uri -> {
saveProfilePictureUrlToFirebase(profilePictureUrl);
});
});
DatabaseReference userRef =
FirebaseDatabase.getInstance().getReference("users").child("Hotel").child(userId);
userData.put("profilePictureUrl", profilePictureUrl);
userRef.updateChildren(userData).addOnSuccessListener(aVoid -> {
Picasso.get().load(profilePictureUrl).into(profilepic);
}).addOnFailureListener(e -> {
});
FirebaseDatabase.getInstance().getReference("users");
userRef.child("Hotel").child(userId).addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
if (snapshot.exists()) {
String profilePictureUrl =
snapshot.child("profilePictureUrl").getValue(String.class);
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
name.setText(nameValue);
email.setText(emailValue);
Picasso.get().load(profilePictureUrl).into(profilepic);
});
});
FirebaseAuth.getInstance().signOut();
startActivity(intent);
getActivity().finish();
})
.show();
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mAuth = FirebaseAuth.getInstance();
emailEditText = findViewById(R.id.login_email);
passwordEditText = findViewById(R.id.login_password);
loginButton = findViewById(R.id.login_button);
progressBar = findViewById(R.id.progressBar);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
loginUser();
});
if (email.isEmpty() || password.isEmpty()) {
return;
progressBar.setVisibility(View.VISIBLE);
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
progressBar.setVisibility(View.GONE);
if (task.isSuccessful()) {
startActivity(intent);
finish();
} else {
});
} else {
progressBar.setVisibility(View.GONE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
recyclerView = findViewById(R.id.recyclerView);
if (currentUser != null) {
mDatabaseReference = FirebaseDatabase.getInstance().getReference("users");
hotelQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
} else {
isValidated = false;
formList.add(formModel);
formAdapter.notifyDataSetChanged();
@Override
});
@Override
if (isValidated != null) {
} else {
formList.add(formModel);
formAdapter.notifyDataSetChanged();
@Override
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(formAdapter);
archiveImageView.setOnClickListener(new View.OnClickListener() {
@Override
startActivity(intent);
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detailed_form);
mAuth = FirebaseAuth.getInstance();
mDatabaseReference = FirebaseDatabase.getInstance().getReference("users");
nameTextView.setText(name);
emailTextView.setText(email);
Picasso.get().load(birUrl).into(birImageView);
Picasso.get().load(tinUrl).into(tinImageView);
if (currentUser != null) {
new AlertDialog.Builder(DetailedForm.this)
.setTitle("Confirm Verification")
.setMessage("Are you sure you want to verify this user?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DatabaseReference hotelReference =
mDatabaseReference.child("Hotel").child(uid);
DatabaseReference restaurantReference =
mDatabaseReference.child("Restaurant").child(uid);
hotelReference.addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot
dataSnapshot) {
if (dataSnapshot.exists()) {
hotelReference.child("isValidated").setValue(true);
showToast("User successfully verified!");
Log.d("DetailedForm", "isValidated: true");
}
}
restaurantReference.addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot
dataSnapshot) {
if (dataSnapshot.exists()) {
restaurantReference.child("isValidated").setValue(true);
showToast("User successfully verified!");
Log.d("DetailedForm", "isValidated: true");
}
}
@Override
public void onCancelled(@NonNull DatabaseError
databaseError) {
Log.e("DetailedForm", "Validation failed: " +
databaseError.getMessage());
showToast("Verification failed. Please try again.");
}
});
}
})
.setNegativeButton("No", null)
if (currentUser != null) {
new AlertDialog.Builder(DetailedForm.this)
.setTitle("Confirm Decline")
.setMessage("Are you sure you want to decline this user?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DatabaseReference hotelReference =
mDatabaseReference.child("Hotel").child(uid);
DatabaseReference restaurantReference =
mDatabaseReference.child("Restaurant").child(uid);
hotelReference.addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot
dataSnapshot) {
if (dataSnapshot.exists()) {
mDatabaseReference = FirebaseDatabase.getInstance().getReference("users");
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
if (currentUser != null) {
String uid = currentUser.getUid();
Query hotelQuery =
mDatabaseReference.child("Hotel").orderByChild("isValidated").equalTo(true);
Query restaurantQuery =
mDatabaseReference.child("Restaurant").orderByChild("isValidated").equalTo(true);
hotelQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
handleDataSnapshot(dataSnapshot);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e("FirebaseDebug", "Hotel Query: onCancelled",
databaseError.toException());
}
restaurantQuery.addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
handleDataSnapshot(dataSnapshot);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e("FirebaseDebug", "Restaurant Query: onCancelled",
databaseError.toException());
}
});