From d1f94f306e09b10f343f0f1fb3051edbfcc69ea4 Mon Sep 17 00:00:00 2001 From: Tristan Seifert Date: Mon, 20 Jan 2014 21:06:00 -0600 Subject: [PATCH] Release 1.0 --- QuickHAC/QuickHAC.xcodeproj/project.pbxproj | 24 ++---------- .../default_avatar.imageset/Contents.json | 17 +++++++++ .../default_avatar@2x.png | Bin 0 -> 7314 bytes QuickHAC/QuickHAC/QuickHAC-Info.plist | 2 +- QuickHAC/QuickHAC/SQUClassDetailController.m | 1 - QuickHAC/QuickHAC/SQUDistrictManager.m | 7 +++- .../QuickHAC/SQUGradeOverviewController.m | 1 - QuickHAC/QuickHAC/SQULoginViewController.m | 36 ++++++++++++++---- .../SQUSettingsGPAOptionsController.m | 2 + QuickHAC/QuickHAC/SQUSettingsStudents.m | 30 +++++++-------- QuickHAC/QuickHAC/SQUSettingsViewController.m | 2 + QuickHAC/QuickHAC/SQUUserSwitcherView.m | 2 +- QuickHAC/assets/about.rtfd/TXT.rtf | 4 +- QuickHAC/assets/acknowledgements.rtf | 29 +++----------- .../assets/miscellaneous/default avatar.psd | Bin 0 -> 84413 bytes .../miscellaneous/default_avatar@2x.png | Bin 0 -> 7314 bytes 16 files changed, 84 insertions(+), 73 deletions(-) create mode 100644 QuickHAC/QuickHAC/Images.xcassets/avatars/default_avatar.imageset/Contents.json create mode 100644 QuickHAC/QuickHAC/Images.xcassets/avatars/default_avatar.imageset/default_avatar@2x.png create mode 100644 QuickHAC/assets/miscellaneous/default avatar.psd create mode 100644 QuickHAC/assets/miscellaneous/default_avatar@2x.png diff --git a/QuickHAC/QuickHAC.xcodeproj/project.pbxproj b/QuickHAC/QuickHAC.xcodeproj/project.pbxproj index 0e8d4de..86980f4 100644 --- a/QuickHAC/QuickHAC.xcodeproj/project.pbxproj +++ b/QuickHAC/QuickHAC.xcodeproj/project.pbxproj @@ -40,7 +40,6 @@ DE3AC657187B5A37007540A9 /* NSDate+RelativeDate.m in Sources */ = {isa = PBXBuildFile; fileRef = DE3AC656187B5A37007540A9 /* NSDate+RelativeDate.m */; }; DE3AC65C187B63D3007540A9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DE3AC65A187B63D3007540A9 /* Localizable.strings */; }; DE485DD81881CEE800B215C6 /* SQUSidebarSwitcherButton.m in Sources */ = {isa = PBXBuildFile; fileRef = DE485DD71881CEE800B215C6 /* SQUSidebarSwitcherButton.m */; }; - DE485DDB1881D67500B215C6 /* default_avatar.jpg in Resources */ = {isa = PBXBuildFile; fileRef = DE485DDA1881D67500B215C6 /* default_avatar.jpg */; }; DE485DDE1881EACA00B215C6 /* SQUUserSwitcherView.m in Sources */ = {isa = PBXBuildFile; fileRef = DE485DDD1881EACA00B215C6 /* SQUUserSwitcherView.m */; }; DE485DE31881FAC700B215C6 /* SQUUserSwitcherCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DE485DE21881FAC700B215C6 /* SQUUserSwitcherCell.m */; }; DE4D5BB21888CA3E00371A75 /* about.rtfd in Resources */ = {isa = PBXBuildFile; fileRef = DE4D5BB11888CA3E00371A75 /* about.rtfd */; }; @@ -64,7 +63,6 @@ DEF0F1BD186EE52B00116B61 /* UIColor+SQUColourUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF0F1BC186EE52B00116B61 /* UIColor+SQUColourUtilities.m */; }; DEF0F1BF186EEA6500116B61 /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEF0F1BE186EEA6400116B61 /* CoreImage.framework */; }; DEF0F1C1186EEA6900116B61 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEF0F1C0186EEA6900116B61 /* QuartzCore.framework */; }; - DEF0F1C5186EEB9500116B61 /* UIView+JMNoise.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF0F1C4186EEB9500116B61 /* UIView+JMNoise.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DEF0F1CB186F7D8F00116B61 /* SQUClassDetailController.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF0F1CA186F7D8F00116B61 /* SQUClassDetailController.m */; }; DEF0F1CE186F7D9E00116B61 /* SQUClassDetailCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF0F1CD186F7D9E00116B61 /* SQUClassDetailCell.m */; }; DEF0F1D7186FC7FA00116B61 /* SQUAssignment.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF0F1D6186FC7FA00116B61 /* SQUAssignment.m */; }; @@ -217,7 +215,6 @@ DE3AC65B187B63D3007540A9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; DE485DD61881CEE700B215C6 /* SQUSidebarSwitcherButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQUSidebarSwitcherButton.h; sourceTree = ""; }; DE485DD71881CEE800B215C6 /* SQUSidebarSwitcherButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SQUSidebarSwitcherButton.m; sourceTree = ""; }; - DE485DDA1881D67500B215C6 /* default_avatar.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = default_avatar.jpg; path = "assets/sidebar UI/default_avatar.jpg"; sourceTree = SOURCE_ROOT; }; DE485DDC1881EACA00B215C6 /* SQUUserSwitcherView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQUUserSwitcherView.h; sourceTree = ""; }; DE485DDD1881EACA00B215C6 /* SQUUserSwitcherView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SQUUserSwitcherView.m; sourceTree = ""; }; DE485DE11881FAC700B215C6 /* SQUUserSwitcherCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQUUserSwitcherCell.h; sourceTree = ""; }; @@ -261,8 +258,6 @@ DEF0F1BC186EE52B00116B61 /* UIColor+SQUColourUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+SQUColourUtilities.m"; sourceTree = ""; }; DEF0F1BE186EEA6400116B61 /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; DEF0F1C0186EEA6900116B61 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - DEF0F1C3186EEB9500116B61 /* UIView+JMNoise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIView+JMNoise.h"; path = "../../JMNoise/JMNoise/UIView+JMNoise.h"; sourceTree = ""; }; - DEF0F1C4186EEB9500116B61 /* UIView+JMNoise.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIView+JMNoise.m"; path = "../../JMNoise/JMNoise/UIView+JMNoise.m"; sourceTree = ""; }; DEF0F1C9186F7D8F00116B61 /* SQUClassDetailController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQUClassDetailController.h; sourceTree = ""; }; DEF0F1CA186F7D8F00116B61 /* SQUClassDetailController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SQUClassDetailController.m; sourceTree = ""; }; DEF0F1CC186F7D9E00116B61 /* SQUClassDetailCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQUClassDetailCell.h; sourceTree = ""; }; @@ -458,9 +453,8 @@ DE0615E717891E23004B2877 /* 3rd Party */, DE06158B17874D0D004B2877 /* SQUAppDelegate.h */, DE06158C17874D0D004B2877 /* SQUAppDelegate.m */, - DE485DDA1881D67500B215C6 /* default_avatar.jpg */, DE06159117874D0D004B2877 /* Images.xcassets */, - DEF0F2491873FB6700116B61 /* iPad Resources */, + DEF0F2491873FB6700116B61 /* Images */, DE06158E17874D0D004B2877 /* QuickHAC.xcdatamodeld */, DE06158317874D0D004B2877 /* Miscellaneous Resources */, DE06158817874D0D004B2877 /* main.m */, @@ -549,7 +543,6 @@ DEF0F24A18740A0200116B61 /* MGSplitViewController */, DEF0F22618727EA700116B61 /* LTHPasscodeViewController */, DEF0F1DE1870E60B00116B61 /* WYPopoverController */, - DEF0F1C2186EEB8000116B61 /* JMNoise */, DE7B4E82186EB0CB008079CC /* KCOrderedAccessorFix */, DE81CDD0186D50E800DC1CAB /* TFHpple (HTML Parsing) */, DE35E9A61806147900F15F20 /* Lockbox (Keychain) */, @@ -728,15 +721,6 @@ name = "Miscellaneous UI"; sourceTree = ""; }; - DEF0F1C2186EEB8000116B61 /* JMNoise */ = { - isa = PBXGroup; - children = ( - DEF0F1C3186EEB9500116B61 /* UIView+JMNoise.h */, - DEF0F1C4186EEB9500116B61 /* UIView+JMNoise.m */, - ); - name = JMNoise; - sourceTree = ""; - }; DEF0F1DE1870E60B00116B61 /* WYPopoverController */ = { isa = PBXGroup; children = ( @@ -773,12 +757,12 @@ path = ../../LTHPasscodeViewController/LTHPasscodeViewController; sourceTree = ""; }; - DEF0F2491873FB6700116B61 /* iPad Resources */ = { + DEF0F2491873FB6700116B61 /* Images */ = { isa = PBXGroup; children = ( DE0A58AA188CEEC8001A5D17 /* blurry_bg.jpg */, ); - name = "iPad Resources"; + name = Images; sourceTree = ""; }; DEF0F24A18740A0200116B61 /* MGSplitViewController */ = { @@ -1061,7 +1045,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - DE485DDB1881D67500B215C6 /* default_avatar.jpg in Resources */, DEF0F23218727EA700116B61 /* Localizable.strings in Resources */, DEF0F23B1872C3AC00116B61 /* settings_defaults.plist in Resources */, DE3AC65C187B63D3007540A9 /* Localizable.strings in Resources */, @@ -1146,7 +1129,6 @@ DEFFDE58186E270900E26423 /* AFNetworkActivityIndicatorManager.m in Sources */, DEF0F2251871EEAD00116B61 /* SQUDistrictAISD.m in Sources */, DE485DE31881FAC700B215C6 /* SQUUserSwitcherCell.m in Sources */, - DEF0F1C5186EEB9500116B61 /* UIView+JMNoise.m in Sources */, DEFFDE5E186E270900E26423 /* UIWebView+AFNetworking.m in Sources */, DEF0F1CB186F7D8F00116B61 /* SQUClassDetailController.m in Sources */, DECFF3CA187B444B007AFE6D /* SQUCycle.m in Sources */, diff --git a/QuickHAC/QuickHAC/Images.xcassets/avatars/default_avatar.imageset/Contents.json b/QuickHAC/QuickHAC/Images.xcassets/avatars/default_avatar.imageset/Contents.json new file mode 100644 index 0000000..d3932db --- /dev/null +++ b/QuickHAC/QuickHAC/Images.xcassets/avatars/default_avatar.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "default_avatar@2x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/QuickHAC/QuickHAC/Images.xcassets/avatars/default_avatar.imageset/default_avatar@2x.png b/QuickHAC/QuickHAC/Images.xcassets/avatars/default_avatar.imageset/default_avatar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5265eddb0b7df3df4fc895fb869f78147704f01 GIT binary patch literal 7314 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 literal 0 HcmV?d00001 diff --git a/QuickHAC/QuickHAC/QuickHAC-Info.plist b/QuickHAC/QuickHAC/QuickHAC-Info.plist index b8b0a77..aff56f0 100644 --- a/QuickHAC/QuickHAC/QuickHAC-Info.plist +++ b/QuickHAC/QuickHAC/QuickHAC-Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 762 + 77E LSRequiresIPhoneOS UIBackgroundModes diff --git a/QuickHAC/QuickHAC/SQUClassDetailController.m b/QuickHAC/QuickHAC/SQUClassDetailController.m index 1dd6721..c9f2063 100644 --- a/QuickHAC/QuickHAC/SQUClassDetailController.m +++ b/QuickHAC/QuickHAC/SQUClassDetailController.m @@ -15,7 +15,6 @@ #import "SQUColourScheme.h" #import "SQUClassDetailCell.h" -#import "UIView+JMNoise.h" #import "PKRevealController.h" #import "AFNetworking.h" #import "WYPopoverController.h" diff --git a/QuickHAC/QuickHAC/SQUDistrictManager.m b/QuickHAC/QuickHAC/SQUDistrictManager.m index b771ab0..b3987c8 100644 --- a/QuickHAC/QuickHAC/SQUDistrictManager.m +++ b/QuickHAC/QuickHAC/SQUDistrictManager.m @@ -355,8 +355,6 @@ - (void) performAveragesRequestWithCallback:(SQUDistrictCallback) callback { [SQUGradeManager sharedInstance].student.school = studentSchool; [_currentDistrict updateDistrictStateWithClassGrades:averages]; - - callback(nil, averages); // Update the display name NSArray *components = [studentName componentsSeparatedByString:@", "]; @@ -372,6 +370,11 @@ - (void) performAveragesRequestWithCallback:(SQUDistrictCallback) callback { } else { [SQUGradeManager sharedInstance].student.display_name = studentName; } + + // NSLog(@"Updated grades for %@ (%@)", [SQUGradeManager sharedInstance].student.name, [SQUGradeManager sharedInstance].student.display_name); + + // Run the callback now to appease login process + callback(nil, averages); } else { callback([NSError errorWithDomain:@"SQUDistrictManagerErrorDomain" code:kSQUDistrictManagerErrorInvalidDataReceived userInfo:@{@"localizedDescription" : NSLocalizedString(@"The gradebook returned invalid data.", nil)}], nil); // NSLog(@"Got screwy response from gradebook: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]); diff --git a/QuickHAC/QuickHAC/SQUGradeOverviewController.m b/QuickHAC/QuickHAC/SQUGradeOverviewController.m index 3814c16..fa1c692 100644 --- a/QuickHAC/QuickHAC/SQUGradeOverviewController.m +++ b/QuickHAC/QuickHAC/SQUGradeOverviewController.m @@ -27,7 +27,6 @@ #import "UIViewController+PKRevealController.h" #import "PKRevealController.h" -#import "UIView+JMNoise.h" #import "AFNetworking.h" @implementation SQUGradeOverviewController diff --git a/QuickHAC/QuickHAC/SQULoginViewController.m b/QuickHAC/QuickHAC/SQULoginViewController.m index 3871fb8..3387979 100644 --- a/QuickHAC/QuickHAC/SQULoginViewController.m +++ b/QuickHAC/QuickHAC/SQULoginViewController.m @@ -174,7 +174,7 @@ - (UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath: _textView.adjustsFontSizeToFitWidth = YES; _textView.minimumFontSize = 12; - _textView.attributedPlaceholder = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Username", @"login view controller placeholder") attributes:@{NSForegroundColorAttributeName: UIColorFromRGB(kSQUColourTitle)}]; + _textView.attributedPlaceholder = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Username", @"login view controller placeholder") attributes:@{NSForegroundColorAttributeName: UIColorFromRGB(kSQUColourAsbestos)}]; _usernameField = _textView; } else if(indexPath.row == 1) { @@ -184,7 +184,7 @@ - (UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath: _textView.adjustsFontSizeToFitWidth = YES; _textView.minimumFontSize = 12; - _textView.attributedPlaceholder = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Password", @"login view controller placeholder") attributes:@{NSForegroundColorAttributeName: UIColorFromRGB(kSQUColourTitle)}]; + _textView.attributedPlaceholder = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Password", @"login view controller placeholder") attributes:@{NSForegroundColorAttributeName: UIColorFromRGB(kSQUColourAsbestos)}]; _passField = _textView; } @@ -333,18 +333,25 @@ - (void) performAuthentication:(id) sender { // Set district so login may occurr [[SQUDistrictManager sharedInstance] selectDistrictWithID:_district.district_id]; + __block SQUStudent *oldStudent = [SQUGradeManager sharedInstance].student; + // Ask the current district instance to do a log in [[SQUDistrictManager sharedInstance] performLoginRequestWithUser:_usernameField.text usingPassword:_passField.text andCallback:^(NSError *error, id returnData){ if(!error) { if(!returnData) { [SVProgressHUD showErrorWithStatus:NSLocalizedString(@"Wrong Credentials", nil)]; + + // Restore old student state + if(oldStudent) { + [[SQUDistrictManager sharedInstance] selectDistrictWithID:oldStudent.district.integerValue]; + [[SQUGradeManager sharedInstance] setStudent:oldStudent]; + } } else { [SVProgressHUD showProgress:-1 status:NSLocalizedString(@"Adding students", nil) maskType:SVProgressHUDMaskTypeGradient]; // Store the username's password in the keychain [Lockbox setString:_passField.text forKey:_usernameField.text]; // Back up the old student as we need a temporary switch to retrieve data - SQUStudent *oldStudent = [SQUGradeManager sharedInstance].student; __unsafe_unretained __block SQULoginViewController *self_unsafe = self; // Set up login function @@ -355,7 +362,7 @@ - (void) performAuthentication:(id) sender { NSLog(@"fetching grades for: %@", [SQUGradeManager sharedInstance].student.name); // Fetch grades - [[SQUGradeManager sharedInstance] fetchNewClassGradesFromServerWithDoneCallback:^(NSError *error) { + [[SQUGradeManager sharedInstance] fetchNewClassGradesFromServerWithDoneCallback:^(NSError *error) { if(!error) { [SVProgressHUD showSuccessWithStatus:NSLocalizedString(@"Done", nil)]; @@ -421,15 +428,22 @@ - (void) performAuthentication:(id) sender { picker.delegate = self; [self.navigationController pushViewController:picker animated:YES]; } else if(![SQUDistrictManager sharedInstance].currentDistrict.hasMultipleStudents && !oldStudent) { - [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"selectedStudent"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - + // No previous students and not multistudent account + [[SQUGradeManager sharedInstance] changeSelectedStudent:_students[0]]; [[SQUGradeManager sharedInstance] setStudent:_students[0]]; _studentLoginFunction(); } else { + // There exists a previous student(s), and this account does not have multistudent + // Perform fetch for this student to gather some info about them if(![SQUDistrictManager sharedInstance].currentDistrict.hasMultipleStudents) { + // this is so the student data goes to the right student + SQUStudent *theStudent = _students[0]; + theStudent.name = nil; + theStudent.display_name = nil; + [[SQUGradeManager sharedInstance] setStudent:theStudent]; + [SVProgressHUD showProgress:-1 status:NSLocalizedString(@"Updating Grades", nil) maskType:SVProgressHUDMaskTypeGradient]; // Fetch grades @@ -480,6 +494,14 @@ - (void) performAuthentication:(id) sender { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error Authenticating", nil) message:error.localizedDescription delegate:nil cancelButtonTitle:NSLocalizedString(@"Dismiss", nil) otherButtonTitles:nil]; [alert show]; + + // Restore old student state + if(oldStudent) { + NSLog(@"Restoring student: %@", oldStudent); + + [[SQUDistrictManager sharedInstance] selectDistrictWithID:oldStudent.district.integerValue]; + [[SQUGradeManager sharedInstance] setStudent:oldStudent]; + } } }]; } diff --git a/QuickHAC/QuickHAC/SQUSettingsGPAOptionsController.m b/QuickHAC/QuickHAC/SQUSettingsGPAOptionsController.m index aeea774..e2d0251 100644 --- a/QuickHAC/QuickHAC/SQUSettingsGPAOptionsController.m +++ b/QuickHAC/QuickHAC/SQUSettingsGPAOptionsController.m @@ -65,6 +65,8 @@ - (id) init { [section addElement:toggle]; } + section.footer = NSLocalizedString(@"These courses will not be counted towards weighted GPA.", nil); + [root addSection:section]; self.root = root; diff --git a/QuickHAC/QuickHAC/SQUSettingsStudents.m b/QuickHAC/QuickHAC/SQUSettingsStudents.m index 33e3a32..c6b0a2b 100644 --- a/QuickHAC/QuickHAC/SQUSettingsStudents.m +++ b/QuickHAC/QuickHAC/SQUSettingsStudents.m @@ -147,25 +147,25 @@ - (void) tableView:(UITableView *) tableView commitEditingStyle:(UITableViewCell // Delete object from DB [[SQUAppDelegate sharedDelegate].managedObjectContext deleteObject:_students[indexPath.row]]; - [_students removeObjectAtIndex:indexPath.row]; + [_students removeObject:_students[indexPath.row]]; + // Do animate-y thing + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; + + // Update selection, if we are deleting the selected student if(indexPath.row == selectedStudent) { - if(selectedStudent < _students.count) { - [[SQUGradeManager sharedInstance] changeSelectedStudent:_students[selectedStudent]]; - } else if(selectedStudent == 0 && _students.count != 0) { - [[SQUGradeManager sharedInstance] changeSelectedStudent:_students[0]]; - } else if(selectedStudent >= _students.count) { - [[SQUGradeManager sharedInstance] changeSelectedStudent:_students[selectedStudent--]]; - } else if(_students.count == 0) { - NSLog(@"all students deleted"); - } else { - NSAssert(false, @"Unhandled student deletion case"); - } + [[SQUGradeManager sharedInstance] changeSelectedStudent:_students[0]]; + + // Set default student + SQUStudent *student = _students[0]; + [[SQUDistrictManager sharedInstance] selectDistrictWithID:student.district.integerValue]; + [[SQUGradeManager sharedInstance] setStudent:student]; + + // Update UI + [[NSNotificationCenter defaultCenter] postNotificationName:SQUGradesDataUpdatedNotification object:nil]; + [[NSNotificationCenter defaultCenter] postNotificationName:SQUStudentsUpdatedNotification object:nil]; } - // Do animate-y thing - [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; - if(_students.count == 1) { self.navigationItem.rightBarButtonItem = nil; [self.tableView setEditing:NO animated:YES]; diff --git a/QuickHAC/QuickHAC/SQUSettingsViewController.m b/QuickHAC/QuickHAC/SQUSettingsViewController.m index 21779ac..52315ad 100644 --- a/QuickHAC/QuickHAC/SQUSettingsViewController.m +++ b/QuickHAC/QuickHAC/SQUSettingsViewController.m @@ -231,9 +231,11 @@ - (void)passcodeWasEnteredSuccessfully { NSLog(@"Passcode entered successful !!!"); } +#ifdef DEBUG - (void) submitFeedback:(id) sender { [TestFlight submitFeedback:_feedbackView.text]; [self dismissViewControllerAnimated:YES completion:NULL]; } +#endif @end diff --git a/QuickHAC/QuickHAC/SQUUserSwitcherView.m b/QuickHAC/QuickHAC/SQUUserSwitcherView.m index a744e5e..be553e7 100644 --- a/QuickHAC/QuickHAC/SQUUserSwitcherView.m +++ b/QuickHAC/QuickHAC/SQUUserSwitcherView.m @@ -132,7 +132,7 @@ - (UICollectionViewCell *) collectionView:(UICollectionView *) collectionView ce } [cell setTitle:student.display_name]; - [cell setImage:[UIImage imageNamed:@"default_avatar.jpg"]]; + [cell setImage:[UIImage imageNamed:@"default_avatar"]]; } return cell; diff --git a/QuickHAC/assets/about.rtfd/TXT.rtf b/QuickHAC/assets/about.rtfd/TXT.rtf index c2ef060..1531674 100644 --- a/QuickHAC/assets/about.rtfd/TXT.rtf +++ b/QuickHAC/assets/about.rtfd/TXT.rtf @@ -9,4 +9,6 @@ \ Have problems with the app? Suggestions? Or just want to talk? Check out {\field{\*\fldinst{HYPERLINK "http://quickhac.com/support"}}{\fldrslt our website.}}\ \ -QuickHAC is the most supreme of all applications ever created for checking grades. It\'92s, like, totally legit. And whatnot.} \ No newline at end of file +Quickly and easily view your grades with a mobile app tailored to be simple, intuitive, and beautiful.\ +\ +QuickHAC currently only supports Austin ISD and Round Rock ISD. Please {\field{\*\fldinst{HYPERLINK "http://quickhac.com/support"}}{\fldrslt contact us}} if you want to see your district added!} \ No newline at end of file diff --git a/QuickHAC/assets/acknowledgements.rtf b/QuickHAC/assets/acknowledgements.rtf index 8b59043..ebe7011 100644 --- a/QuickHAC/assets/acknowledgements.rtf +++ b/QuickHAC/assets/acknowledgements.rtf @@ -6,9 +6,8 @@ {\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid3} {\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid4} {\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid5} -{\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid6} -{\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid7}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}} +{\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid6}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}} \margl1440\margr1440\vieww12020\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural @@ -38,22 +37,6 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\ \ -\b JMNoise -\b0 \ -Copyright (c) 2010, Jason Morrissey\ -All rights reserved.\ -\ -Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ -\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'95 }Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\ -{\listtext \'95 }Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\ -{\listtext \'95 }Neither the name of Jason Morrissey nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission of Jason Morrissey.\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural -\cf0 \ -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\ -\ - \b Lockbox \b0 \ Copyright (c) 2012 Hawk iMedia, All Rights Reserved.\ @@ -61,7 +44,7 @@ Copyright (c) 2012 Hawk iMedia, All Rights Reserved.\ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\ \ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls4\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ +\ls3\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \cf0 \ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\ @@ -74,7 +57,7 @@ PKRevealController - Copyright (C) 2012 Philip Kluz (Philip.Kluz@zuui.org)\ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\ \ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls5\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ +\ls4\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \cf0 \ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\ @@ -100,7 +83,7 @@ Copyright (c) 2011 Sam Vermette\ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\ \ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls6\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ +\ls5\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \cf0 \ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\ @@ -115,7 +98,7 @@ Copyright \'a9 2013 Nicolas CHENG\ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\ \ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls7\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ +\ls6\ilvl0\cf0 {\listtext \'95 }The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \cf0 \ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.} \ No newline at end of file diff --git a/QuickHAC/assets/miscellaneous/default avatar.psd b/QuickHAC/assets/miscellaneous/default avatar.psd new file mode 100644 index 0000000000000000000000000000000000000000..064f0f64717da30098a5a1fd9e81636f610674ec GIT binary patch literal 84413 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%0AQ`6NdOAj*6i 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 QNjeu<8@_|;@BFFYznE}Wh5!Hn literal 0 HcmV?d00001 diff --git a/QuickHAC/assets/miscellaneous/default_avatar@2x.png b/QuickHAC/assets/miscellaneous/default_avatar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5265eddb0b7df3df4fc895fb869f78147704f01 GIT binary patch literal 7314 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 literal 0 HcmV?d00001