Key Information

Register
Submit
The challenge is finished.

Challenge Overview

Welcome to the Sky Zone - Android App - Find a Park Challenge! The primary goal of this challenge is to allow users to search for Sky Zone parks and view details about each park.

Project Overview

Sky Zone is developing an improved mobile experience for new and existing customers.  Overall we need to ensure that Sky Zone continues to be on the cutting edge of its user experience and stays connected to their customers when they are not at a park.  At a high level, the mobile app will be used by Sky Zone customers to further enhance their visit and relationship with Sky Zone.

The two primary goals of the app are:

  1. Making it easy for customers to purchase jump time (tickets for a Sky Zone visit), and

  2. Creating a social environment around Sky Zone that keeps customers coming back repeatedly through gamification and social conventions.

We have already helped build Sky Zone’s iOS app and now we’d like to port this over to Android.

Challenge Overview

Our main goal for this challenge is to build out the functionality around searching for Sky Zone parks within the Android app.   

We have built out a couple of menus that will link to the Buy Jump Time page.  Your goal is to build out the ability to find parks from this page:

  1. Set up links to this page from side menu and radial menu

  2. Integrate with Google Maps to show nearest parks

  3. Show list of nearby parks

  4. Add ability to drill into park details

  5. Unit tests

Here is a video walkthrough of the application flow from the existing iOS app.

Buy Jump Time - Find Parks Screen

  1. Use a modal popover to present the Buy Tickets page after clicking “Buy Tickets” from the radial menu or “Buy Jump Time” from the sidebar menu.

  2. Upon loading the page, load the nearest locations returned from Get Nearest Park Locations service (see below).

    1. This will be based on the user’s current location. You will need to request this on this page.

    2. If the user refuses, load the map to the Sky Zone headquarters (latitude: 34.088034, longitude: -118.261426).  No parks will be displayed. Store location in Global Constants, a la AppDelegate.swift in current iOS app.

  3. Use Google Maps to display locations returned by search, or nearest location(s) initially.

  4. Add a custom search bar (text field) overlaid on the map, and use Get Parks Based on Keyword service (see below).

  5. Add an expandable table view that lists the parks returned from the search.

  6. Upon expanding a park row in the table, user will see a phone number which should call using the Android phone app.  Email should also use the Android standard mail app when clicked (compose directly in email app).

  7. Clicking on Directions should open the Google Maps app with direction from user’s current location to selected Sky Zone location.

  8. Clicking Tickets should push into a new screen in the same MVC that will display the Park Information screen (below).

  9. Clicking the star allows the user to favorite the park. This should call a dummy function. Actual functionality is out of scope for this challenge. Use mock data to hold state.

  10. Clicking “Close” will close/hide the modal and return user to original screen.

Buy Jump Time - Park Information Screen

  1. The user should be able to see an image of the park, returned by Get Park Info service.

  2. Favorite and direction icons should be overlayed on the image, same functionality has previous page. Favorite star should toggle (true: filled, false: outlined).  Actual functionality out of scope for this challenge.

  3. Also like the first page, the basic data about the park should be displayed the same as the extended table cell.

  4. The three buttons should be ready to push a new screen (call dummy methods) within the MVC but should not be functioning. This is out of scope for this challenge.  You may have the stubbed methods open an AlertDialog indicating this functionality will be in the future.

  5. Special Offers button should pop over a single page modal that displays a special offers page (below).

    1. If no parkAdvertisement in the Park data, then do not display the button.

Special Offers Page

  1. Build this static page based on the mock data provided.

  2. Call to Action button should be title based actionItemName in park.parkAdvertisement (see Data).

  3. Call to Action button should link to actionItemUrl in park.parkAdvertisement

  4. Closing this modal should return the user to the previous Park Information Screen.

Unit Tests

  1. Please provide unit tests where appropriate.

REST Calls

Use SZE REST API for additional documentation and the RestAPIClient to test APIs.

Follow ParkApi.swift for organization and example implementation of the APIs.

Follow FindParkViewController.swift and ParkInfoViewController.swift for using ParkApi and working with Park data.  You may use Park.swift for an example Park model.

  1. Get All Parks

    1. Method: GET

    2. URL: /parks

Please use this to get all park data, and then cache the result after first use.  You should use Google Maps to find parks near a location based on the cached list of parks.  See current iOS FindParkViewController.swift#getNearestParks() for example implementation.

  1. Get Parks Based on Keyword

    1. Method: GET

    2. URL: /parks

    3. Parameters

      1. name

While this API exists, it is not currently working.   Please add method similar to ParkApi.swift#getLocationsBasedOnCriteria() to call this API, but don’t use it.  Follow FindParkViewController.swift#searchWithText() for example implementation using Maps APIs to find parks nearest a search term (e.g. 29464 or Chicago, IL).

  1. Get Park Info

    1. Method: GET

    2. URL: /parks

    3. Parameters

      1. parkId: (array of Park IDs)

This is used to present the Park Details page.  See ParkInfoViewController.swift for example usage.

  1. Get Nearest Park Locations

    1. Method: GET

    2. URL: /parks

    3. Parameters:

      1. zipCode

While this API exists, it is not currently working.   Please add method similar to ParkApi.swift#getNearestParkLocations() to call this API, but don’t use it.  Follow FindParkViewController.swift#getNearestParks() to find nearest parks based on All Parks cache.  Include parks within DEFAULT_DISTANCE_TO_SEARCH (321869 meters, or 200 miles).

  1. To get initial park data, use user’s current location to get current latitude/longitude, and follow “Get Nearest Park Locations” above.

  2. To search for park data, follow “Get Parks Based on Keyword” above using the contents of the search bar.

Technology Overview

  • Android SDK

  • REST APIs

  • Supported Android versions: API 19 - 14.

Materials Provided and Additional Resources

Technology Overview

  • Android

  • REST APIs

Materials Provided

  • Existing Android shell application

  • Screen Assets

  • iOS version of app



Final Submission Guidelines

Submission Deliverables

A complete list of deliverables can be viewed in the Topcoder Assembly Competition Tutorials.

Additionally,

  1. All code should be well-commented.

  2. Code must work for Android 4.4.x, 4.1.x-4.3.x), and 4.0.3-4.0.4) (API 19 - 14).

  3. Target devices are Samsung Galaxy S4 and S5.  Tablet support is out of scope.

  4. Only portrait orientation needs to be supported.

  5. Provide a video overview of your additions to the app.

Final Submission

For each member, the final submission should be uploaded via the challenge detail page on topcoder.com.

The winner will be responsible for assisting with merging the code into our Git repo.

Environment Setup

  1. Request access to the GitLab Sky Zone Group in the project forums.

  2. Once added to the team, fork the skyapp-android repository and work off of the 30051204-find-park branch.

  3. Add jasonfavors and harrywynn as members of your forked repository.

  4. Most design assets, including Proxima Nova font, can be found in the SkyZone-Resources repository.  A full collection of assets can be found in the existing iOS application under SkyZone-R1/Images.xcassets.

  5. If you have access to Xcode, reference the existing iOS application for latest functionality and navigation flow.

  6. The InVision prototype may be used in lieu of the above, however the iOS app takes precedence (any discrepancies may be changed during final fixes).

  7. Please use latest Android Studio (1.3) when using an IDE for development.

  8. Set up the RestAPIClient (attached in forums) within Android Studio to test REST API calls.

ELIGIBLE EVENTS:

2016 TopCoder(R) Open

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30051204