This case describes the application developed in Software Country to make the process of room booking more convenient.
There are two basic scenarios for the application:
1. Free room search
Meeting rooms are booked daily by managers, developers and HR department and many meetings are held. Free room search can be a time-consuming and routine task to do. Basically, there are two ways to find out which room is available at the moment. The first one is to knock the door by disturbing attention of participants of an ongoing event and a more complex one—to go to Outlook app calendar, check out current schedules of all rooms, and look up an empty time slot to create an appointment. There is a possibility that someone books the room selected before you make a choice and you have to start the annoying process again.
It could be much simpler to book the room by clicking just one button with a help of a special app providing room status hints.
2. Ad hoc booking
Situations which require you to gather for a short 15 min meetings to discuss project tasks are quite frequent. In such a case, there is no sense to reserve the appointment for long periods of time; usually, there is a lack of empty slots. But if there are at least 10 minutes until next meeting the application would allow reservation as this is good enough for the case.
Another possible situation—the room was booked for a long period of time, eg 2 hours, but the event finished earlier. The application provides an option to cancel the appointment and free up the room.
Selecting a platform for the solution
Android OS was selected at the outset as it carries important advantages, such as customisation, which allows starting up and shutting down devices on schedule and enables autorun. A wide choice of device models based on Android is available on the market.
Several options were explored before the final decision. There was no need to choose an expensive top configuration for an information display because every meeting room requires own device so the total price of solution would rise significantly. However, low-budget tablets were not suitable, too: they had weak, blurry matrices, low resolution, an outdated operating system which resulted in a low-quality product and bad user experience. We explored available options and finally selected Alcatel OneTouch Pixi 3 (10) 3G. It had average but sufficient hardware: 1280x800 TFT IPS, Android 5.1, 1 Gb RAM, MediaTek MT8321 1.3 GHz processor and cost around 150 USD.
We ordered black acrylic glass custom-made cases to protect access to hardware buttons and mount tablets to a wall as it has holes for screws. Five tablets were installed next to the door of each meeting room. By the way, meeting rooms in the company are called in the name of classic programming languages: Cobol, Prolog, Fortran, Ada, Pascal, and each has its own icon which is displayed together with a room number on the screen.
The application allows creating an appointment for predefined time slots: 15, 30, 45 min or 1, 1.5, 2 hours. For example, if a user selects 2 hours interval and room is available only part of that time, the application will offer to book a room considering time constraints. Bottom bar displays current statuses of other meeting rooms: red—the room is busy, green—available, and grey if an error happened while acquiring status (it sometimes happens in Exchange).
Key functionality and wow-factor of application is face recognition with a help of Microsoft Face API Microsoft Face API. On each booking attempt, the frontal camera of the tablet takes a user photo and uses it to match with a prepared database of employees from Exchange. If the user was successfully recognised the application sets the username as the author of the appointment in the title. That saves time by eliminating the need to enter the name manually. Face recognition result is influenced by several factors including light conditions in the hall and most important—source photo of the user from the database.
Planning & development
On the stage of planning, we considered two solution options for meeting room booking and room status acquiring: Office 365 Android SDK или EWS API. As it was discovered later an adapted Android version of EWS Java API (derived from the official version of EWS Java API) is more universal and allows to connect to cloud Office 365 Exchange as well as to local Exchange.
Originally company had on-premises Exchange configured, but our IT-support team planned the switch to Office 365 Exchange Online, so we set the goal to select the most universal solution to support smooth migration in order to eliminate further problems with compatibility. Migration to cloud API required to change credentials in the application and base URL (setUrl method of ExchangeService class): On-premises Exchange uses address https://mail.DOMAIN/EWS/Exchange.asmx, where DOMAIN – domain name of the company, and address for Office 365 Exchange Online —https://outlook.office365.com/EWS/Exchange.asmx (manual setup is necessary if Autodiscover does not work or works improperly)
Integration features
During integration of EWS API, we met some difficulties due to the fact that the library was originally written for Java SE and utilised an outdated Apache Http Client and DNS client (opposite to Office 365 SDK which is built on a more modern architecture).
Finally, the problem with Apache Http Client was resolved by including the row in defaultConfig build.gradle of the app module:
useLibrary 'org.apache.http.legacy'
Apache Client support was removed beginning from Android SDK 23 (6.0), thereby all legacy libraries require this setting in order to build successfully. We selected compact MiniDNS (minidns-core) as the best DNS client solution.
API calls are wrapped conveniently using RxJava to process them asynchronously and do not block application UI. For example (RxJava 1):
Observable.create(new Observable.OnSubscribe<Boolean>() {
@Override
public void call(Subscriber<? super Boolean> subscriber) {
// Exchange API calls
}
})
.subscribeOn(Schedulers.io());
If the room was booked in the application. booking can be prolonged or cancelled. In case of prolongation, the user will be offered the maximum available time slots. To cancel appointments created under a personal user account, mobile or desktop Outlook is recommended because that requires authorisation.
The user may have an avatar set in Exchange so it will be displayed next to the room icon. Photos are stored at URL (for Office 365 Exchange Online):
https://outlook.office365.com/EWS/Exchange.asmx/s/GetUserPhoto?email=EMAIL&size=SIZE
where EMAIL—user email address, and SIZE—the size of the photo, for example, HR96x96. You may find more information about account images on MSDN.
There is one important thing to remember when doing account setup for meeting rooms: two types of accounts should exist—one to retrieve status information (full rights) and second to create appointments. If booking is done through full rights account then appointment could be created in overlap with ongoing meetings, and this should be avoided to prevent schedule chaos.
To make future updates more straightforward, all devices are configured to receive Firebase Push Notifications. When creating a push message, a certain device can be defined (by room number) as well as all devices for a simultaneous update. As soon as the push is being delivered, APK file download starts from internal FTPS server of the company. Limitations of Android security system require manual confirmation (tap 'Install' button on the screen) but that usually takes no more than few minutes.
Probably you've seen a QR code next to the room icon. It was created to collect feedback; the link can be open from personal mobile device to leave a comment about the app and to describe problems.
Problems & solutions
As it turned out, it was quite difficult to get a contract with the office owner in order to get power grid connection to the installed tablets (walls and ceiling in the hall do not have power sockets). We decided to provide portable power sources for the tablets—power banks of 18 Ah capacity. To save energy and switch batteries less frequently, the tablets are configured to shut down at 20:00 and start up every day at 08:00 on work days.
Our IT-support team configured a private Wi-Fi network for solution devices and enabled filtering by IP for security. However, Cisco software does not support a feature of filtering by URL and we could not use some handy tools such as Crashlytics from Fabric to track errors because IP-addresses change dynamically. Access to Firebase to enable push-notifications and Azure Cloud (Microsoft Face API) was allowed without any issues (IP ranges)
Currently, our solution is actively used for more than 1.5 years and tablets are synchronized every work day. After the initial debug & testing of the application, we did not meet any serious issues except one bug with room status updates which was resolved after cache cleaning. Clients visiting our office are interested in our product and appreciate its convenience. Future plans include extra logging in Firebase as well as an option to send charge status reports by e-mail to notify that Powerbank needs a switch.