Overall: Very good document!

CUOrganized

Final Project Proposal

developed by: Cooper Sousa

User's Manual

Team Members: Cooper Sousa

Table of Contents:

Abstract...... 1

Introduction...... 2

Major Section Titles...... 3

Month View...... 3

Week View...... 3

Add Event...... 4

Add Course Auto...... 5

Add Course Manual...... 5

Event/Course Details...... 6

Authoring Tool...... NA

Acknowledgements...... 7

Abstract

This user's manual guide will give you the information necessary to successfully use CUOrganized. CUOrganized is an Android Application that acts as a calendar/daily-planner for both your Clemson course schedule and your own personal schedule. Throughout this guide you will find a details and screenshots of each page and function in the application. CUOrganized is broken up into two main views (month and week) and contains 3 main functions (add course, add event and view event/course details).

Introduction

Team Members: Cooper Sousa

Project Title:CUOrganized

Target Audience: Clemson Students

Target Devices: Android Phone and Tablet, Minimum SDK Level 14[RP1]

App Functionality:

CUOrganized is a calendar/daily-planner application for Clemson students that easily syncs with the student's schedule. CUOrganized displays the student's courses and custom events in a calendar style month view or a SIS Week-at-a-Glance style week view. CUOrganized gives Clemson students the power to organize their college life with features including: Event and course details, course assignments, a category system for events, customizable alarms and repeating events. All of these features are worked into a clean and flexible user interface that will make CUOrganized the easiest way to organize your busy college life.

App Benefits:

Clemson's iROAR System is a very powerful tool, but it is not user friendly. There is no easy way for a student to quickly view their course schedule on iROAR and those students who do use a planner do not want to take the time to write in their class schedule for every single week for the whole semester. CUOrganized's first benefit is that it solves that problem by giving the student a one-stop resource that contains not only the student's schedule, but also any other events that the user adds to the app. Another benefit of CUOrganized is the week view that will replicate the old SIS Week-at-a-Glance view that many students enjoyed. The final benefit of CUOrganized is that it is tailored to Clemson students. There are many daily-planner applications out there on the market, but none of them are specifically designed to be used by a Clemson student. This gives CUOrganized an advantage over those other applications because CUOrganized syncs up with your course schedule and can include Clemson important dates in your calendar.

Major Section Titles

Month View

Description:The month view is one of the two basic home pages of the application. The month view is displayed when the phone is in portrait orientation. The top bar contains the month and year of the current month being displayed and buttons to change move to the previous and next month. The next section is a calendar that contains colored boxes representing the user's courses and events. The colors of the boxes can be customized in the settings page. The bottom section contains a list of the events for the current day that is selected. By default, when the app is first opened the current day will be selected. A different day can be selected by clicking on the calendar box for that day.

Screenshots:

Week View

Description:The week view is the second basic home page of the application. The week view is displayed when the phone is in landscape orientation. The week view will show the user a more detailed look at what the user has going on in a time-based structure. The view will be scrollable in both the x and y directions and will have the days of the current month on the y-axis and the hours of the day on the x-axis. See the images below for a visual representation of the week view. Courses and events will be displayed on the view as colored bars representing the time that the event occurs. When the view is first opened the current day will be displayed on the top of the screen. The screen will display 4-5 days depending on how large of a screen the hardware devise has.

Screenshots:

Add Event

Description:The add event page is how the user is able to add their own personal events to the application. The add event page is accessed by clicking on the “plus” button on the top menu bar. That button will open a pop-up that will give the user the option to add an event or a course. When 'Add Event' is selected than the add event page will be opened. The page consists of a scrollable list of fields and a button. When all of the fields are filled and submitted than the event will be added to the app and will now show up in the month and week view.

Screenshots:

Add Course Auto

Description:The add course auto page is how the user adds one of their Clemson courses to the application. The add course page is accessed by clicking the “plus” button on the top menu bar, then on add course, then add course automatically. The user first selects the course major, which will bring up a list of courses for that major. The user than selects the correct course, which brings up a list of sections for that course. The user finally selects the correct section and then submits that information, which will add the selected course to the application.

Screenshots:

Add Course Manual

Description:The add course manual page is how the user manually adds in course to the application. The add course page is accessed by clicking the “plus” button on the top menu bar, then on add course, then add course manually. Like in the Add Event page, the user will be prompted with a list of fields and a button to submit those fields.

Screenshots:

Event/Course Details

Description:To see details about any event or course, simply click on one of the colored boxes or bars in the month or week views. This will pop up more details about that event our course

Screenshots:

Acknowledgements

I heavily relied on this tutorial when I was setting up my application to work with an external database.How to connect Android with PHP, MySQL

  • Greg Edison - His Assignment 1 code helped me greatly in structuring my basic calendar frame work. I also learned from his code how to:
  • Set up SQLite with Android
  • Dynamically fill a GridView with an Adapter
  • Simple SQLite Database Tutorial- This is also a great tutorial on a very simple sqlite setup
  • Popup Date and Time Picker Tutorial
  • And of coures, Stack Overflow like always

Technical Reference Manual

Team Members: Cooper Sousa

Table of Contents:

Introduction...... 1

Internal Database...... 2

External Database...... 4

Major Sections Titles...... NA

Authoring Tool...... NA

PHP Scripts...... 6

Acknowledgements...... 7

Introduction

Technical Summary: CUOrganized is built on a basic calendar foundation. The month view, week view and day list are all populated with custom adapters. Each table in the internal database is represented by a Java class that makes for easier handling of information between the application and the internal database. The setting class is designed as a singleton class so that there is only one copy of the setting available at the time. I also decided to use the Time class instead of the Calendar class when storing datetimes in my application. (More Technical Details to come)

Hardware Components: Orientation sensor for switching between month and week view.

Internal Database Schema

  • Event Table -Holds the most basic form of an entry into the calendar/schedule.

◦id -Integer - primary key – autoincrement

◦title -Text - Title holds the name of the event

◦description -Text - Optional description added by the user about the event

◦start -Integer - The start time of the event in Milliseconds since Epoch. I am using the Android Time Class to handle dates and times within my app, which has a convienienttoMillis() and set(millis) functions that make this the easiest way to store the date internally on the device. It is important to remember to parse as a long, even though SQLite does not have a long datatype.

◦end -Integer - Same deal as start, but for the ending time. both start and end will have the same date, but different times for an Event (since I have not yet put in functionality for events to span multiple day.

◦course_id -Integer - Foreign key for the course table. a stand-a-lone event that is not part of a Course will have a course_id of -1.

  • Course Table -Holds courses that are added by the user. A course will a separate event for each meeting of the class, along with a list of assignments for that class.

◦id -Integer - primary key – autoincrement

◦code -Text - the major abbreviation plus course number and section, ex: 'CPSC 481-3'. The code is used for information purposes only in the internal database (displaying details about the course), which is why the code is saved as a string together and not separated out.

◦title -Text - The full name of the course

◦teacher -Text - Again, just like the code the teacher field is for information purposes only so there is no need to expand teacher to its own table. The odds of a student having the same teacher for 2 classes in one semester is very rare in my opinion and does not justify having a separate table for teachers. There is also a teachers table in the external database that holds all of the information about which teacher teach which classes. Lastly, keeping Teacher as a text column in the course table simplifies my sql calls and saves me from having to add another class to my project (which is already up near 20 java classes)

◦days -Text - a string that contains the days of the week that the class meets. The format is a string of 'true' and 'false' separated by commas. ex: for a MWF class 'false,true,false,true,false,true,false'

  • Assignments Table -Holds Assignments, which are pretty much notes with a date attached to them for a course.

◦id -Integer - primary key – autoincrement

◦title -Text - Name of the Assignment, given my user

◦finished -Text - a boolean for whether or not the assignment has been finished by the user. Currently have not implemented this feature but I plan on having this working in the next version. There is no boolean in sqlite so I have decided to store my booleans as the string 'true' or 'false'

◦time -Integer - milliseconds since Epoch, same deal as the start and end time in Event.

◦course_id -Integer - Foreign Key - the course that this assignment is associated with. All assignments, must relate to a course.

  • Category Table – Holds the Categories that the Events can be filed under

◦category_id – Integer – Primary Key – Auto-increment

◦name – Text – The name of the category, ex: 'sports', 'work', etc

◦color – Text – The hexadecimal representation of the color for the boxes to be displayed on the calendar.

External Database Schema

  • Courses Table -A master list of all of the courses out there. Right now my external database has a very select few, but in theory this would have every course that clemson had to offer

◦id -Integer - primary key, autoincrement

◦major_id -Integer - foreign key to the id of the Majors Table.

◦number -Integer - The specific number of the course. For example, in CPSC 481-3, the 'number' would be '481'

◦section -Integer - The section number of the class. For example, in CPSC 481-3, the 'section' would be '3'

◦title -varchar(100) - The full title of the course, ex: 'Mobile Device Sofware Development'

◦teacher_id -Integer - foreign key to the id of the Teachers Table.

◦start (and end)-Datetime - The date and time down to the minute of when the first class starts to when the last class ends. start, combined with 'end', will give us not only the start and end times of when each class begins and ends, but also the first and last day that the class should be entered into the calendar. ex: for our CPSC 481-3 class, the Start datetime would be '2014-01-08 11:00:00' and the end datetime would be '2014-05-02 12:15:00'. I concidered making start and end both longs (in milliseconds) to make them the same as the Times being stored in the internal database, but I ended up deciding that readability was more important on the server side and that SQL and PHP provided more functions that made working with datetimes easier than working with milliseconds.

◦dow -varchar(45) - same deal as 'days' in the internal database.

  • Teachers Table -a list of clemson teachers, very simple table at the momment.

◦id -Integer - primary key, autoincrement

◦lname -varchar(40) - the last name of the teacher

◦fname -varchar(40) - the first name of the teacher

  • Majors Table -a list of clemson majors

◦id -Integer - primary key, autoincrement

◦code -varchar(10) - the abbreviated code of the major, ex: 'CPSC' or 'COMM'

◦title -varchar(40) - the long name of the major, ex: 'Computer Science' or Communication Studies'

PHP Scripts

▪db_config.php – configuration settings

▪db_connect.php – connects to external database

▪get_course.php – returns a single course, given the course_id

▪get_course_sections.php – returns all courses, matching course_number

▪get_major_courses.php – returns all courses given a course_major_id

▪get_majors.php – returns all majors from majors table

▪create_db.php – webscript that will populate the database with Clemson courses

Acknowledgements

I heavily relied on this tutorial when I was setting up my application to work with an external database.How to connect Android with PHP, MySQL

  • Greg Edison - His Assignment 1 code helped me greatly in structuring my basic calendar frame work. I also learned from his code how to:
  • Set up SQLite with Android
  • Dynamically fill a GridView with an Adapter
  • Simple SQLite Database Tutorial- This is also a great tutorial on a very simple sqlite setup
  • Popup Date and Time Picker Tutorial
  • And of coures, Stack Overflow like always

Responsibilities (Cooper Does Everything)

  • List of Deliverables:

◦Functional Components of app code

▪Month Calendar View

  • The month calendar view is the basic homepage of the application. The calendar is dynamically filled with events that are pulled from the internal database. Events are represented on the calendar as colored boxes. Currently, all events are shown in purple and all courses are shown in orange. However, once the category system is implemented then the user will be able to select their own color scheme and give each new category that they create its own color. The bottom of the page shows a list of the events for that day, each entry in that list is clickable and will bring up more information. Each day on the calendar is also clickable and will change the day on the bottom of the screen.

▪Week View

  • The week view will be triggered when the user turns the phone horizontal. This will resemble the old SIS Week-at-a-glance view. This view will be scrollable in both the x and y directions. The y direction will include a months worth of days, with the screen showing 5 at a time (the view will be loaded with the current day at the top of the screen). The x direction will include a full 24 hours, with the screen showing 10 hours at a time (the view will be loaded with 8am on the left and 6pm on the right). Each event will have a colored, clickable bar like to the month view.

▪Add Course Manual

  • There are two ways for the user to add a course. The first is for the user to manually add in a course. This consists of the user filling out information such as course name, number, start date, end date, start time, end time and the days of the week that the class meets. When the user confirms the details the course will be added into the internal database.

▪Add Course Auto

  • The other way for the user to add a course is to add one automatically by looking up the course by entering in the course major, number and section. The course information is then retrieved from an external database and then added to the internal database.

▪Add Event

  • The user can also add in their own custom events. This process is very similar to adding in a course manually.

▪Event and Course Details

  • When an Event is clicked on the month or week view a pop-up screen appears with details about that Event. This pop-up includes buttons to edit and delete the event. Clicking edit will bring back up the

▪Assignments

  • Assignments are events that can be added to a course. An example of an assignment would be a homework assignment or test. Assignments will be shown on the course details page. Each assignment will have a specific 'due date'. The class meeting for which this assignment's 'due date' occurs will display an exclamation point inside the square of the calendar and day views. Each assignment will be able to be 'finished', which is similar to deleting the assignment, except that it will be kept in a list of finished assignments until the assignment's due date has past (so the user may choose to 'unfinish' it).

▪Category System