MyCampus About | Getting Started | Writing Plugins | Getting the Source | Branching

Plugins

Plugin Guidelines

When developing plugins, in all decisions regarding architecture, design, and interface, please keep these guidelines (plugin guidelines) in mind:

  • Plugins should do one major thing, and one thing only. For example, the Courses tab will only show you where your classes are. It won't do that and be a course scheduler and allow you to register, etc. So pick one thing for your plugin to do.
  • Plugins need to be generic. No hard-coded links or data. The plugin (through the use of the Campus.plist and MCCampus class) should be able to work on any campus (though campuses can turn off certain plugins). This is critical as it will affect much of how you develop the plugin.
  • Plugins should work off-line. Data should be cached on the phone and only downloaded when needed (use the data bundles to achieve downloads per-plugin at a specific interval). The one exception to this would be the directory plugin.

Maps

Goal: Find or show places on a particular campus.

The Maps tab is meant to be the hub of much of the content within MyCampus. Most other tabs eventually display their data on the Map. The map will provide an API for highlighting buildings, streets, or an address of some kind. The map will be accessible from any place within MyCampus. On the technical side, the Maps tab will be written using OpenGL ES for flexibility and performance.

Features of the Maps plugin:

  • Be able to map any landmark. A landmark is any building, restaurant, or bus stop.
  • There will also be a shared Places sheet that has all of these landmarks that can be used when searching.
  • Each place is an entity, which has an owner where you can jump from the map to a plugin.

Contributors:

  • Reza
  • Kevin

Food

Goal: The food tab is meant to answer three primary questions:

  • I'm hungry, what is open right now?
  • I want Chinese (or Italian, or Mexican, or ...), where can I eat?
  • I only have a few minutes, what food is close?

Naturally in answering the questions above, there will be three modes of operation (or three different filters/ways to sort restaurants) in this order:

  • Genre
  • Time (what is open right now or what closes soon)
  • Distance (from a building or your current location)

The food tab will most likely has these features:

  • A segmented control with the three modes in the navigation bar at the top of the Food tab. This would be very similar to how the Phone app has their All or Missed Calls segmented control in the top of the Recents tab.
  • The navigation bar would also contain a button for searching so you could just quickly pull up a search field.
  • Below the navigation bar there would be a table view that would show the results of whatever mode you were in (or the search results).
  • Tapping on a restaurant navigates (using the navigation controller's push of a view controller) to the detail view for that restaurant. The detail view will contain the following information about the restaurant:
    • Name of the restaurant
    • Phone number
    • Hours
    • If it delivers
    • Address -- tapping on it opens in the Maps tab
    • Reviews -- maybe just a button to see reviews, and then tapping on that pushes on a reviews view controller that has the actual reviews and a way to add them.

Now there are few other ideas we had thought of when brainstorming the Food tab:

  • The behavior explained about would be if you were in landscape mode, if you slide the phone over, it would switch to Cover Flow mode of all the genres, from which you could select.

Contributors:

  • Mo
  • Markus
  • Alex
  • Ian

Directory

Goal: Do what the online PH currently does: find people and their information.

This will entail having a search field and a table view of results. If there are multiple results, they will be shown in the table view, otherwise, a single result will just automatically open the detail view. The detail view for a person (either by tapping on their name in the results table view or on single-result search results) will contain the following information:

  • Name
  • Alias (NetID for U of I, but remember MyCampus is generic so we need some way to wrap this)
  • Phone numbers (mobile especially)
  • Email
  • Department
  • Address (link to Maps application [not tab])

But isn't a goal of all plugins to use off-line data?
Yes, it is. However, with this, there is no way to get the entirety of PH on the phone. The only caching recommended would be to cache the information of recently search for people (maybe in the last 24 hours or so).

Contributors:

  • Steve
  • Mo

Transport

Again, this is a tab that can get really blown out of proportion.

Goal: Provide a way to see how to get from point A to point B.

This will have the following features:

  • Pick a source and a destination. For this, you will use the Places sheet or use the current location.
  • The source and destination will be a "stop". For each stop, the routes that hit that stop are listed, as well as the times those stops are effective for a given route.

This tab will not contain the following:

  • Information about parking.
  • Bike paths

Contributors:

  • Jon
  • JC
  • Brandon

Emergency

Goal: Provide a list of all the important emergency numbers and news that can be accessed rapidly.

The features of this tab may include:

  • Have the look and feel of a detail view in the address book.
  • A table view of all the numbers, kind of like in address book where you have numbers for mobile, home, work, etc.
  • Important news table view (this feed would come from emergency.illinois.edu).

The numbers to include for U of I (again, these should not be hard-coded but should be in the Campus.plist file) are:

Emergency Numbers (if not a 911 emergency)

Campus Police333-1216
Rape/Crisis Hotline9-911
C-U Directory Assistance411
Emergency Dean333-0050
McKinley Dial-A-Nurse333-2700

Campus Assistance Numbers

CITESā€ˆHelp Desk244-7000
Dean of Students333-0050
MTD Bus Rides384-8188
SafeRides265-7433

Courses

There were a lot of ideas that were thrown around when we were thinking about courses. In general, we couldn't really think of many solid ones. For now, this is what we have:

Goal: To find out where your classes are.

The Courses tab is not a scheduler, nor is it a course catalog. It really should do just the following (unless we feel otherwise):

  • You input your courses (we'll help fill them in for you by back-checking it with the course catalog).
  • Once you have your schedule, you can map it on the Maps tab.

As far as implementation, you might consider the following:

  • Have a generic MCCourseCatalog class that allows you to look up the course listings for a particular semester. Remember, MyCampus is generic so the URLs for the course catalog should be in the Campus.plist file. Then use a data provider (subclass of MCDataProvider) in order to load the data in a standard format that all campuses will adopt.

Contributors:

  • Mo
  • Ian

This plugin does not add any additional functionality than what could be attained from the Maps plugin. If you know where your classes are, just add them as favorite.


Events

We couldn't really think of any solid features for the Events tab that were consistent with the goals of MyCampus. Maybe we just show a bunch of RSS feeds?