Application Title: CampusCompass
Application Developer: Brian Bleck
Contact Information:
CampusCompass Demo Video: CampusCompass
Information for the contest that differs from what is below:
- I have included a live GoogleMaps key in my email invitation to the judges. This key may be pasted into the code as described in the "Instructions for Building CampusCompass" section below.
- Alternatively, judges may create their own GoogleMaps key and paste it into the code as described in the "Instructions for Building CampusCompass" section below.
What does it do?
- CampusCompass is an Android app that provides directions to locations on the University of New Mexico (UNM) campus (and in some cases, locations nearby UNM campuses), as well as information related to the particular locations.
- The main menu allows users to select a type of destination, which will take them to the map screen.
- The map screen contains a list of all destinations of the selected type. This list is sorted by distance, from closest to the user to farthest from the user.
- The map screen also shows the map location of the visible destinations in the list and dynamically redraws itself as the user scrolls through the list of destinations.
- The map screen has a search option, which allows the user to use key words to filter the list results. The list is filtered using the destinations titles and descriptions, as provided by the UNM open data. The list and map will dynamically update as the user types characters into the search bar.
- In the map screen, the items in the list have two buttons: an "Info" button and a "Get Directions" button.
- The Info button summons a dialog that provides the user with more information related to the list item.
- The Get Directions button takes the user into the Google Maps App (it must be installed on the user's device) where walking directions will be displayed that will lead the user to the list item's location.
The driving motivation for this project was my experience at the beginning of every semester, wishing there was an easier way to find buildings on campus. This feeling was echoed during each semester when I would find myself in need of a restroom, without knowing where the closest one was. The framework of this project could be applied to any campus, geographic region, etc. At the heart of this project is the open data APIs provided by UNM. Those APIs allow the app to supply the user with lists of related locations, which the user can search through and see dynamically displayed on an in-app googlemap. The app uses user location to connect to the GoogleMaps app and provide detailed directions to help the user find the chosen location. Additionally, the UNM APIs (often, but not always) include extra information pertinent to particular locations.
CampusCompass is currently functional. Remaining fixes to be made are:
- Working with UNM to add more restroom locations to their API.
- Working with UNM to add other needed functionalities to their API and CampusCompass.
This app has been extensively testing on a Google Pixel running Android Pie (API 28). It has also been testing using the Android Studio Emulator running API 27 on a Nexus 5X emulation. Minimum API is 24, and recommended API is 28 (API 28 has superior location finding). At present, there are not any known Android devices that do not support Campus Compass, so long as the minimum Android API is met and the user gives the required permissions. Orientation is locked in Portrait. The app currently supports english only. Users must enable location services and GPS in order to use the app. Required permissions: Internet, Fine Location.
implementation 'android.arch.persistence.room:runtime:1.1.1'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation "com.squareup.retrofit2:adapter-rxjava:2.1.0"
implementation 'com.google.android.gms:play-services-maps:16.0.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.maps.android:android-maps-utils:0.5+'
implementation 'com.google.maps:google-maps-services:0.9.0'
implementation 'com.google.code.gson:gson:2.8.5'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
implementation "io.reactivex:rxjava:1.2.1"
implementation "io.reactivex:rxandroid:1.2.1"
implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'org.slf4j:slf4j-simple:1.7.25'
The app consumes the following external services:
- Open Data API from the University of New Mexico
- GoogleMaps API
The following cosmetic improvements could be made to the app:
- Color scheme
- Handling unexpected javascript in JSON strings (as seen in the descriptions associated with some, but not all, library locations).
The app could be extended in the following ways:
- As previousy mentioned, adding restroom locations for every restroom on campus would be ideal.
- Working with UNM to add more useful information to their API and supporting that information within CampusCompass. For example, if UNM allowed nearby restaurants to advertise then CampusCompass could support such advertisements using the current framework. Advertising dollars could make CampusCompass self-sustaining and allow for it to be expanded (and help UNM create more APIs or to improve current APIs).
- CampusCompass could be integrated into the current UNM app.
Adobe XD Wireframe: CampusCompass
- As a UNM Student, I would like to be able to easily find academic buildings on campus so I can easily find where my classes are at the beginning of each semester.
- As a Visitor to UNM, I would like to be able to get directions to places on campus, including where metered parking is located so that I don't have to wander around or search the internet for such information.
- As UNM, I would like to be able to sell advertising for local restaurants in a way that will also provide students with useful information so they can easily discover nearby dining options.
- As a human who is on the UNM campus, I would like to be able to easily find the closest blue phone and the closest restroom so that I can quickly find them in case of emergency.
- As a user of the app, I would like to be able to filter the list of potential destinations and search for a particular one so that I can find it quickly.
CREATE TABLE IF NOT EXISTS `Token`(
`title` TEXT COLLATE NOCASE,
`building_num` TEXT,
`abbr` TEXT,
`campus` TEXT,
`keywords` TEXT,
`image` TEXT,
`link` TEXT,
`token_id` TEXT NOT NULL,
`description` TEXT,
`token_type` INTEGER,
`mLongitude` REAL,
`mLatitude` REAL,
PRIMARY KEY(`token_id`)
);
CREATE INDEX `index_Token_title`
ON `Token` (`title`);
CREATE INDEX `index_Token_token_type`
ON `Token` (`token_type`);
);
- General Google Terms
- Google Play Services Dependencies
- Google Maps
- Google GSON
- Google GSON License
- Retrofit
- Retrofit License
- RxJava
- RxJava License
- Simple Logging Facade For Java SLF4J
- CircleImageView
- CircleImageView License
- Clone the repository into a local Android Studio project.
- Get a GoogleMaps API Key
- Add a live Google API key to: app -> res -> values -> google_maps_api.xml. Cut the text "GOOGLE_KEY_NEEDS_TO_BE_PASTED_HERE" and replace it with the live key.
- The Google API keys in the version history of CampusCompass are all dead and will not work for you.
- Build the app onto a device running a minimum of API 24.
- The initial screen is the Main Menu. It presents users with the option to choose a type of destination. To choose a destination, the user must click on one of the icons.
- Upon clicking on an icon, the user is taken to the Map Screen.
- To return to the Main Menu from the Map Screen the user can use the standard Android 'Back Navigation' button. Alternatively, the user can click on the top toolbar, either on the text indicating a return to the Main Menu or on the 'Home' button.
- To quit the app, the user may press the Android 'Back Navigation' button when they are in the Main Menu screen. From any other screen, they may press the 'Back Navigation' button twice: once to
- In the Map Screen, the user may enter the name of the destination they are searching for or they may try entering key words. For example, if the user selects "Find Building" on the Main Menu they may enter either "Center for the arts" or "popejoy" to find the same building (the building's official name is "Center For The Arts").
- For any destination list item in the Map Screen, the user may press the Info button to see more information on the destination (if UNM open data provides more information).
- For any destination list item in the Map Screen, the user may press the Get Directions buttons to get directions to the destination. Get Directions will take the user into the Google Maps App (must already be installed on the user's device) with the destination preloaded.
- For any destination list item in the Map Screen, the user may tap on the non-button portion of the item to center the map on that particular destination.
Many thanks to Danielle Andazola for the compass graphics, inquiries for freelance work can be directed to Dzolamarketing@gmail.com