Mercurial > hg > soniczoomios
changeset 29:fabb3a5cdfc9
Timed session improvements. Desperate pathetic attempts to send a simple HTTP POST.
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Fri, 22 Feb 2013 17:41:38 +0000 |
parents | e2c62db1e265 |
children | c0a6f7c66719 |
files | BottomTabViewController.mm IntroViewController.xib PresetAlertViewController.h PresetAlertViewController.mm Question.m QuestionnaireViewController.mm ServerComms.h ServerComms.mm TimedSessionController.h TimedSessionController.mm TopButtonViewController.h TopButtonViewController.mm TopButtonViewController.xib eventLogger.h eventLogger.mm presetManager.h presetManager.mm testApp.h testApp.mm |
diffstat | 19 files changed, 420 insertions(+), 115 deletions(-) [+] |
line wrap: on
line diff
--- a/BottomTabViewController.mm Mon Feb 18 11:45:05 2013 +0000 +++ b/BottomTabViewController.mm Fri Feb 22 17:41:38 2013 +0000 @@ -49,9 +49,10 @@ } -- (IBAction)show:(id)sender +- (IBAction)show:(id)sender withSelection:(NSInteger)sel { self.theOFAppRef = sender; + self.interfaceSelector.selectedSegmentIndex = sel; self.view.hidden = NO; }
--- a/IntroViewController.xib Mon Feb 18 11:45:05 2013 +0000 +++ b/IntroViewController.xib Fri Feb 22 17:41:38 2013 +0000 @@ -42,7 +42,6 @@ <string key="NSFrame">{{326, 881}, {116, 44}}</string> <reference key="NSSuperview" ref="766721923"/> <reference key="NSWindow"/> - <reference key="NSNextKeyView"/> <string key="NSReuseIdentifierKey">_NS:9</string> <bool key="IBUIOpaque">NO</bool> <string key="targetRuntimeIdentifier">IBIPadFramework</string> @@ -116,21 +115,21 @@ IGdpdmUgeW91IGEgYmlnZ2VyIHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSBzb3VuZCB3aWxs IGJlY29tZSBmYXIgbW9yZSByYW5kb20gYW5kIHVuY29udHJvbGxhYmxlIGFzIHlvdSBtb3ZlIGJpZ2dl ciBkaXN0YW5jZXMuDQ1XaGF0IHdlIGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRv -IGlzIHVzZSBib3RoIHRoZSB6b29tZXIgYW5kIHRoZSBzbGlkZXJzIGZvciBhYm91dCAxMCBtaW51dGVz -IGVhY2gsIGFuZCBzYXZlIGFueSBzb3VuZHMgdGhhdCB5b3UgbGlrZS4gQWxzbyB1c2UgdGhlICJyYW5k -b21pc2UiIGFuZCAibG9jayIgYnV0dG9ucy4gQWZ0ZXIgYWJvdXQgMjAgbWludXRlcyBvZiBpbnRlcmFj -dGlvbiBhIHByb21wdCB3aWxsIGFwcGVhciBmb3IgYSBzaG9ydCBxdWVzdGlvbm5haXJlIHRoYXQgd2ls -bCBoZWxwIHVzIGFzc2VzcyB0aGUgaW50ZXJmYWNlIGZ1cnRoZXIuICBBZnRlciB0aGF0LCBwbGVhc2Ug -ZmVlbCBmcmVlIHRvIHVzZSBpdCBzb21lIG1vcmU6IHRoZSBtb3JlIGRhdGEgd2UgZ2V0IHRoZSBiZXR0 -ZXIuIE1vcmUgZXhjaXRpbmcgZmVhdHVyZXMgYXJlIHBsYW5uZWQgZm9yIHRoaXMgYXBwLCBzbyBwbGVh -c2Ugd2F0Y2ggb3V0IGZvciB1cGRhdGVzLg0NTk9URTogWW91ciBhY3Rpb25zIHdpbGwgYmUgbG9nZ2Vk -LCBhbmQgc2VudCB0byBhIHNlY3VyZSBzZXJ2ZXIgaGVyZSBhdCBRdWVlbiBNYXJ5IFVuaXZlcnNpdHku -ICBIb3dldmVyIG5vIHBlcnNvbmFsIGRhdGEgKG5hbWUsIGVtYWlsIGV0Yy4pIHdpbGwgYmUgY29sbGVj -dGVkLCBhc3NvY2lhdGVkIHdpdGggdGhpcyBJRCBvciBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLiBJdCBp -cyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYXJlIGNvbm5lY3RlZCB0byBXaUZpIGludGVybmV0 -IHdoaWxzdCB1c2luZyB0aGlzIEFwcCwgb3RoZXJ3aXNlIHRoZSBsb2cgZGF0YSB3aWxsIHRha2UgdXAg -c3BhY2Ugb24geW91ciBkZXZpY2UuDVRvIGNvbnNlbnQgdG8gdGhpcyBwbGVhc2UgcHJlc3MgIkFncmVl -IiBiZWxvdy4gVG8gZGVjbGluZSBqdXN0IGV4aXQgdGhlIGFwcC4NA</bytes> +IGlzIHVzZSBib3RoIHRoZSB6b29tZXIgYW5kIHRoZSBzbGlkZXJzIGZvciA2IG1pbnV0ZXMgZWFjaCwg +YW5kIHNhdmUgYW55IHNvdW5kcyB0aGF0IHlvdSBsaWtlLiBBbHNvIGNoZWNrIG91dCB0aGUgInJhbmRv +bWlzZSIgYW5kICJsb2NrIiBidXR0b25zLiBBZnRlciB0aGlzIGEgc2hvcnQgcXVlc3Rpb25uYWlyZSB3 +aWxsIGFwcGVhciB0aGF0IHdpbGwgaGVscCB1cyBhc3Nlc3MgdGhlIGludGVyZmFjZSBmdXJ0aGVyLiBB +ZnRlciB0aGF0LCBwbGVhc2UgZmVlbCBmcmVlIHRvIHVzZSBpdCBzb21lIG1vcmU6IHRoZSBtb3JlIGRh +dGEgd2UgZ2V0IHRoZSBiZXR0ZXIuIEZ1cnRoZXIgZXhjaXRpbmcgZmVhdHVyZXMgYXJlIHBsYW5uZWQg +Zm9yIHRoaXMgYXBwLCBzbyBwbGVhc2Ugd2F0Y2ggb3V0IGZvciB1cGRhdGVzLg0NTk9URTogWW91ciBh +Y3Rpb25zIHdpbGwgYmUgbG9nZ2VkLCBhbmQgc2VudCB0byBhIHNlY3VyZSBzZXJ2ZXIgaGVyZSBhdCBR +dWVlbiBNYXJ5IFVuaXZlcnNpdHkuICBIb3dldmVyIG5vIHBlcnNvbmFsIGRhdGEgKG5hbWUsIGVtYWls +IGV0Yy4pIHdpbGwgYmUgY29sbGVjdGVkLCBhc3NvY2lhdGVkIHdpdGggdGhpcyBJRCBvciBzdG9yZWQg +aW4gdGhlIGRhdGFiYXNlLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYXJlIGNvbm5l +Y3RlZCB0byBXaUZpIGludGVybmV0IHdoaWxzdCB1c2luZyB0aGlzIEFwcCwgb3RoZXJ3aXNlIHRoZSBs +b2cgZGF0YSB3aWxsIHRha2UgdXAgc3BhY2Ugb24geW91ciBkZXZpY2UuDVRvIGNvbnNlbnQgdG8gdGhp +cyBwbGVhc2UgcHJlc3MgIkFncmVlIiBiZWxvdy4gVG8gZGVjbGluZSBqdXN0IGV4aXQgdGhlIGFwcC4N +A</bytes> </object> <object class="NSColor" key="IBUITextColor"> <int key="NSColorSpace">1</int> @@ -257,9 +256,9 @@ <int key="objectID">2</int> <reference key="object" ref="766721923"/> <array class="NSMutableArray" key="children"> - <reference ref="814850245"/> <reference ref="530886577"/> <reference ref="83132392"/> + <reference ref="814850245"/> </array> <reference key="parent" ref="0"/> </object>
--- a/PresetAlertViewController.h Mon Feb 18 11:45:05 2013 +0000 +++ b/PresetAlertViewController.h Fri Feb 22 17:41:38 2013 +0000 @@ -11,7 +11,7 @@ @interface PresetAlertViewController : NSObject <UIAlertViewDelegate> - +@property BOOL alertShowing; - (void)showPresetNamePrompt; @end
--- a/PresetAlertViewController.mm Mon Feb 18 11:45:05 2013 +0000 +++ b/PresetAlertViewController.mm Fri Feb 22 17:41:38 2013 +0000 @@ -10,8 +10,21 @@ extern PresetManager presetManager; +extern EventLogger eventLogger; + @implementation PresetAlertViewController - +- (PresetAlertViewController *) init{ + [super init]; + self = [super init]; + if (self) { + // Custom initialization + + self.alertShowing = NO; + + } + return self; + +} - (void)showPresetNamePrompt{ UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Save" message:@"Enter preset name:" @@ -23,6 +36,7 @@ alertTextField.keyboardType = UIKeyboardTypeDefault; alertTextField.placeholder = @"Preset Name"; [alert show]; + self.alertShowing = YES; [alert release]; } @@ -32,9 +46,16 @@ if(buttonIndex == 0){ // cancel NSLog(@"preset save was cancelled"); + self.alertShowing = NO; }else{ // save it - presetManager.addPreset([[[alertView textFieldAtIndex:0] text] cStringUsingEncoding:NSASCIIStringEncoding]); + self.alertShowing = NO; + if([[[alertView textFieldAtIndex:0] text] isEqualToString:@"newuser"]){ + // call new user stufff + eventLogger.newUser(); + }else{ + presetManager.addPreset([[[alertView textFieldAtIndex:0] text] cStringUsingEncoding:NSASCIIStringEncoding]); + } } }
--- a/Question.m Mon Feb 18 11:45:05 2013 +0000 +++ b/Question.m Fri Feb 22 17:41:38 2013 +0000 @@ -21,7 +21,7 @@ if(self){ self.questionText = text; self.questionType = type; - self.answer = 0; + self.answer = -1; } return self;
--- a/QuestionnaireViewController.mm Mon Feb 18 11:45:05 2013 +0000 +++ b/QuestionnaireViewController.mm Fri Feb 22 17:41:38 2013 +0000 @@ -105,11 +105,11 @@ } const char *userComments = [self.commentText.text cStringUsingEncoding: NSUTF8StringEncoding]; - - ((testApp *)self.theOFAppRef)->questionnaireHidden(answersArray, userComments); [self.commentText resignFirstResponder]; self.view.hidden = YES; + ((testApp *)self.theOFAppRef)->questionnaireHidden(answersArray, userComments); + } //---------------------------------------------------------------- @@ -156,7 +156,7 @@ self.commentText.hidden = NO; - self.questionText.text = @"Thanks for helping science help you. Feel free to add further comments in the text box below, and then press 'finish' to go back to the app."; + self.questionText.text = @"Thanks for helping science help you. Feel free to add further comments in the text box below, and then press 'finish' to go back and use the app, unhassled."; } //----------------------------------------------------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ServerComms.h Fri Feb 22 17:41:38 2013 +0000 @@ -0,0 +1,18 @@ +// +// ServerComms.h +// sonicZoom +// +// Created by Robert Tubb on 21/02/2013. +// +// + +#import <Foundation/Foundation.h> + +@interface ServerComms : NSObject <NSURLConnectionDelegate> +-(void)test; +-(void)postRequest:(NSString *)msgbody; + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; +- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse; +@end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ServerComms.mm Fri Feb 22 17:41:38 2013 +0000 @@ -0,0 +1,55 @@ +// +// ServerComms.m +// sonicZoom +// +// Created by Robert Tubb on 21/02/2013. +// +// + +#import "ServerComms.h" + +@implementation ServerComms +-(void)test{ + NSLog(@"hi"); +} +-(void)postRequest:(NSString *)msgbody{ + NSMutableURLRequest *request = [[NSMutableURLRequest alloc] + initWithURL:[NSURL + URLWithString:msgbody]]; + + [request setHTTPMethod:@"POST"]; + [request setValue:@"text/xml" + forHTTPHeaderField:@"Content-type"]; + + NSString *xmlString = @"<data><item>Item 1</item><item>Item 2</item></data>"; + + [request setValue:[NSString stringWithFormat:@"%d", + [xmlString length]] + forHTTPHeaderField:@"Content-length"]; + + [request setHTTPBody:[xmlString + dataUsingEncoding:NSUTF8StringEncoding]]; + + [[NSURLConnection alloc] + initWithRequest:request + delegate:self]; +} + + +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ + NSLog(@"!!!!!!!!!!!!!!!!!!!!connection error"); +} + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ + NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveResponse"); +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ + NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveData"); +} + +- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse{ + +} + +@end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TimedSessionController.h Fri Feb 22 17:41:38 2013 +0000 @@ -0,0 +1,22 @@ +// +// TimedSessionController.h +// sonicZoom +// +// Created by Robert Tubb on 18/02/2013. +// +// +#define SECONDS_PER_INTERFACE 10 +#import <Foundation/Foundation.h> + + +@interface TimedSessionController : NSObject <UIAlertViewDelegate> +@property (nonatomic, assign) id theOFAppRef; +@property (nonatomic,strong) NSTimer * theCurrentTimer; + +- (void)setAppRef:(id)theOFApp; +-(void)resetTime:(int)newTime; // if we want to put ourselves somewhen +-(void)startTimer; // go from start +-(void)cancelTimers; // stop the whole thing +-(void)showNextPrompt; + +@end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TimedSessionController.mm Fri Feb 22 17:41:38 2013 +0000 @@ -0,0 +1,101 @@ +// +// TimedSessionController.m +// sonicZoom +// +// Created by Robert Tubb on 18/02/2013. +// +// +#import "testApp.h" +#import "TimedSessionController.h" +@interface TimedSessionController() + // private stuff + +@end + +@implementation TimedSessionController + + int orders[6][3] = {{0,1,2},{0,2,1},{1,0,2},{1,2,0},{2,0,1},{2,1,0}}; + int theOrder; + int scount; + + NSArray *alertMessages = [NSArray arrayWithObjects: + @"Thanks, now try the sliders only", + @"Thanks, now try the sliders and the Zoomer together", + @"Thanks, now try the zoomer only", + @"Thanks, now please take the questionnaire",nil]; + +// nicer if it was initWithAppRef ? +- (void)setAppRef:(id)theOFApp{ + self.theOFAppRef = theOFApp; + theOrder = arc4random() % 6; + NSLog(@"the order: %d", theOrder); + + scount = 0; +} +-(void)startTimer{ + // SHOW FIRST PROMPT + NSString *themessage; + themessage = [alertMessages objectAtIndex:orders[theOrder][0]]; + UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Thanks!" + message:themessage + delegate:self + cancelButtonTitle:@"Continue" + otherButtonTitles:nil]; + alert.alertViewStyle = UIAlertViewStyleDefault; + [alert show]; + [alert release]; + +} +-(void)resetTime:(int)newTime{ + +} + +// ALERT + + +-(void)showNextPrompt{ + NSString *themessage; + scount++; + if(scount < 3){ + themessage = [alertMessages objectAtIndex:orders[theOrder][scount] ]; + }else{ + themessage = [alertMessages objectAtIndex:3 ]; + } + UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Thanks!" + message:themessage + delegate:self + cancelButtonTitle:@"Continue" + otherButtonTitles:nil]; + alert.alertViewStyle = UIAlertViewStyleDefault; + [alert show]; + [alert release]; + +} + +-(void)cancelTimers{ + scount = 0; + if(self.theCurrentTimer){ + [self.theCurrentTimer invalidate]; + self.theCurrentTimer = nil; + } +} +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ + + NSLog(@"OK TO NEXT VIEW"); + + if(scount < 3){ + NSInteger next = orders[theOrder][scount]; + ((testApp *)self.theOFAppRef)->interfaceSelected(next); + + self.theCurrentTimer = [NSTimer scheduledTimerWithTimeInterval:SECONDS_PER_INTERFACE target:self selector:@selector(showNextPrompt) userInfo:nil repeats:NO]; + + }else{ + ((testApp *)self.theOFAppRef)->showQuestionnaire(); + scount = 0; // incase we try again + self.theCurrentTimer = nil; + } + +} + + +@end
--- a/TopButtonViewController.h Mon Feb 18 11:45:05 2013 +0000 +++ b/TopButtonViewController.h Fri Feb 22 17:41:38 2013 +0000 @@ -8,14 +8,15 @@ #import <UIKit/UIKit.h> #import "HelpViewController.h" - +#define IS_SUPERVISED 1 // to set new user button @interface TopButtonViewController : UIViewController @property (nonatomic, assign) id theOFAppRef; @property (retain, nonatomic) IBOutlet UIBarButtonItem *playButton; @property (retain, nonatomic) IBOutlet UIBarButtonItem *pauseButton; -@property (retain, nonatomic) IBOutlet UIBarButtonItem *qButton; +@property (retain, strong, nonatomic) IBOutlet UIBarButtonItem *qButton; +@property (retain, strong,nonatomic) IBOutlet UIBarButtonItem *newUserButton; -(IBAction)show:(id)sender; -(void)setAppRef:(id)theOFApp;
--- a/TopButtonViewController.mm Mon Feb 18 11:45:05 2013 +0000 +++ b/TopButtonViewController.mm Fri Feb 22 17:41:38 2013 +0000 @@ -34,8 +34,24 @@ // Do any additional setup after loading the view from its nib. self.playButton.enabled = true; self.pauseButton.enabled = false; - self.qButton.enabled = false; - + self.qButton.enabled = true; + self.newUserButton.enabled = true; + //------------------------ + // Get the reference to the current toolbar buttons + NSMutableArray *toolbarButtons = [self.toolbarItems mutableCopy]; + + // This is how you remove the button from the toolbar and animate it + [toolbarButtons removeObject:self.qButton]; + [self setToolbarItems:toolbarButtons animated:YES]; + + // This is how you add the button to the toolbar and animate it + /* + if (![toolbarButtons containsObject:self.qButton]) { + [toolbarButtons addObject:self.qButton]; + [self setToolbarItems:toolbarButtons animated:YES]; + } + */ + } - (void)enableQuestionButton{ @@ -128,12 +144,14 @@ [_pauseButton release]; [_qButton release]; + [_newUserButton release]; [super dealloc]; } - (void)viewDidUnload { [self setPlayButton:nil]; [self setPauseButton:nil]; [self setQButton:nil]; + [self setNewUserButton:nil]; [super viewDidUnload]; } @end
--- a/TopButtonViewController.xib Mon Feb 18 11:45:05 2013 +0000 +++ b/TopButtonViewController.xib Fri Feb 22 17:41:38 2013 +0000 @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00"> <data> - <int key="IBDocument.SystemTarget">1536</int> + <int key="IBDocument.SystemTarget">1552</int> <string key="IBDocument.SystemVersion">11G63</string> - <string key="IBDocument.InterfaceBuilderVersion">2844</string> + <string key="IBDocument.InterfaceBuilderVersion">3084</string> <string key="IBDocument.AppKitVersion">1138.51</string> <string key="IBDocument.HIToolboxVersion">569.00</string> <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> - <string key="NS.object.0">1930</string> + <string key="NS.object.0">2083</string> </object> <array key="IBDocument.IntegratedClassDependencies"> <string>IBProxyObject</string> @@ -53,24 +53,17 @@ <int key="IBUIStyle">1</int> <reference key="IBUIToolbar" ref="358683122"/> </object> + <object class="IBUIBarButtonItem" id="1052071507"> + <string key="targetRuntimeIdentifier">IBIPadFramework</string> + <reference key="IBUIToolbar" ref="358683122"/> + <int key="IBUISystemItemIdentifier">5</int> + </object> <object class="IBUIBarButtonItem" id="996249183"> <string key="IBUITitle">Save Preset</string> <string key="targetRuntimeIdentifier">IBIPadFramework</string> <int key="IBUIStyle">1</int> <reference key="IBUIToolbar" ref="358683122"/> </object> - <object class="IBUIBarButtonItem" id="319053509"> - <string key="IBUITitle">New User</string> - <string key="targetRuntimeIdentifier">IBIPadFramework</string> - <int key="IBUIStyle">1</int> - <reference key="IBUIToolbar" ref="358683122"/> - </object> - <object class="IBUIBarButtonItem" id="702923516"> - <string key="IBUITitle">Questionnaire</string> - <string key="targetRuntimeIdentifier">IBIPadFramework</string> - <int key="IBUIStyle">1</int> - <reference key="IBUIToolbar" ref="358683122"/> - </object> <object class="IBUIBarButtonItem" id="528026433"> <string key="targetRuntimeIdentifier">IBIPadFramework</string> <reference key="IBUIToolbar" ref="358683122"/> @@ -128,6 +121,18 @@ <bool key="IBUIClearsContextBeforeDrawing">NO</bool> <string key="targetRuntimeIdentifier">IBIPadFramework</string> </object> + <object class="IBUIBarButtonItem" id="702923516"> + <bool key="IBUIEnabled">NO</bool> + <string key="IBUITitle">Questionnaire</string> + <string key="targetRuntimeIdentifier">IBIPadFramework</string> + <int key="IBUIStyle">1</int> + </object> + <object class="IBUIBarButtonItem" id="319053509"> + <bool key="IBUIEnabled">NO</bool> + <string key="IBUITitle">New User</string> + <string key="targetRuntimeIdentifier">IBIPadFramework</string> + <int key="IBUIStyle">1</int> + </object> </array> <object class="IBObjectContainer" key="IBDocument.Objects"> <array class="NSMutableArray" key="connectionRecords"> @@ -164,6 +169,14 @@ <int key="connectionID">32</int> </object> <object class="IBConnectionRecord"> + <object class="IBCocoaTouchOutletConnection" key="connection"> + <string key="label">newUserButton</string> + <reference key="source" ref="841351856"/> + <reference key="destination" ref="319053509"/> + </object> + <int key="connectionID">39</int> + </object> + <object class="IBConnectionRecord"> <object class="IBCocoaTouchEventConnection" key="connection"> <string key="label">savePressed:</string> <reference key="source" ref="996249183"/> @@ -271,13 +284,12 @@ <reference ref="597523981"/> <reference ref="996249183"/> <reference ref="680653375"/> - <reference ref="702923516"/> <reference ref="528026433"/> - <reference ref="379344923"/> <reference ref="898331149"/> <reference ref="180077124"/> <reference ref="924591997"/> - <reference ref="319053509"/> + <reference ref="379344923"/> + <reference ref="1052071507"/> </array> <reference key="parent" ref="766721923"/> </object> @@ -292,11 +304,6 @@ <reference key="parent" ref="358683122"/> </object> <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="702923516"/> - <reference key="parent" ref="358683122"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">12</int> <reference key="object" ref="189059998"/> <reference key="parent" ref="358683122"/> @@ -332,9 +339,19 @@ <reference key="parent" ref="358683122"/> </object> <object class="IBObjectRecord"> + <int key="objectID">11</int> + <reference key="object" ref="702923516"/> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">40</int> + <reference key="object" ref="1052071507"/> + <reference key="parent" ref="358683122"/> + </object> + <object class="IBObjectRecord"> <int key="objectID">35</int> <reference key="object" ref="319053509"/> - <reference key="parent" ref="358683122"/> + <reference key="parent" ref="0"/> </object> </array> </object> @@ -354,6 +371,7 @@ <string key="33.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> <string key="35.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> <string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> + <string key="40.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> <string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> <string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> </dictionary> @@ -361,7 +379,7 @@ <nil key="activeLocalization"/> <dictionary class="NSMutableDictionary" key="localizations"/> <nil key="sourceID"/> - <int key="maxID">38</int> + <int key="maxID">40</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <array class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -423,11 +441,16 @@ </object> </dictionary> <dictionary class="NSMutableDictionary" key="outlets"> + <string key="newUserButton">UIBarButtonItem</string> <string key="pauseButton">UIBarButtonItem</string> <string key="playButton">UIBarButtonItem</string> <string key="qButton">UIBarButtonItem</string> </dictionary> <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName"> + <object class="IBToOneOutletInfo" key="newUserButton"> + <string key="name">newUserButton</string> + <string key="candidateClassName">UIBarButtonItem</string> + </object> <object class="IBToOneOutletInfo" key="pauseButton"> <string key="name">pauseButton</string> <string key="candidateClassName">UIBarButtonItem</string> @@ -452,6 +475,6 @@ <string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string> <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> <int key="IBDocument.defaultPropertyAccessControl">3</int> - <string key="IBCocoaTouchPluginVersion">1930</string> + <string key="IBCocoaTouchPluginVersion">2083</string> </data> </archive>
--- a/eventLogger.h Mon Feb 18 11:45:05 2013 +0000 +++ b/eventLogger.h Fri Feb 22 17:41:38 2013 +0000 @@ -25,17 +25,18 @@ #include "json.h" #include "testApp.h" - - - +#import "ServerComms.h" + #define EVENT_THIN_FACTOR 10 #define EVENT_LOG_FILENAME "log.json" -#define SERVER_URL "http://127.0.0.1:8080/testservice/" -#define UPLOAD_CHUNK_SIZE 500 +//#define LOGGING_SERVER_URL "http://www.isophonics.net/datacollector/" +#define LOGGING_SERVER_URL "http://127.0.0.1:8080/testservice/" +#define UPLOAD_CHUNK_SIZE 100 + #define QUESTIONNAIRE_ENABLE_TIME 100000 // milliseconds -#define APP_CREATION_TIME 381429000000 // milliseconds to the time i wrote this wee blighter +#define APP_CREATION_TIME 381429000000 // milliseconds to the time i wrote this wee blighter saves digits -#define PROGRAM_VERSION 1.0 // IMPORTANT TOCHNAGE! +#define PROGRAM_VERSION 0.1 // IMPORTANT TOCHNAGE! // can add but don't change ordering - this will invalidate logs enum leventType {SAVE_PRESET, // 0 @@ -128,7 +129,15 @@ return os; } //--------------------------------------------------------------------------- - + + class ThreadedObject: ofThread{ + int i; + int threadedFunc(int i){ + return i + 10; + }; + }; + + class EventLogger{ public: int nextUploadNumber; @@ -136,7 +145,9 @@ bool logUploadInProgress; bool serverConnectionOK; bool consentGiven; - unsigned int deviceID; // unique get something from hardware?? + bool questionnaireCompleted; + bool questionnaireUploaded; + unsigned int deviceID; unsigned int totalInteractionTime, savedInteractionTime, sessionTime, sessionStartTime; string userName; // not unique @@ -149,18 +160,13 @@ void questionnaireAnswersObtained(vector<int> answers, const char* userComments); void urlResponse(ofHttpResponse & response); private: - // what we need... - /* - time, type, value - */ int currentHTTPRequestID; + + vector<lEvent> theEvents; - + void thinnedLogEvent(lEvent nextEvent); - - // values applicable to all events - unsigned int nextUploadQty; string questionnaireComments; @@ -169,12 +175,11 @@ bool testConnection(); vector<int> questionnaireAnswers; - bool questionnaireCompleted; - bool questionnaireUploaded; int interfaceOrder; void checkLogFile(); + void deleteLogs(); // new user bool uploadEventLog(bool async); void firstEverAppOpen(); void readJsonToLog(const string &jsonFile); @@ -190,6 +195,10 @@ } }; + + // + ServerComms *serverComms; + };
--- a/eventLogger.mm Mon Feb 18 11:45:05 2013 +0000 +++ b/eventLogger.mm Fri Feb 22 17:41:38 2013 +0000 @@ -8,10 +8,9 @@ //--------------------------------------------------------------------------- #include "eventLogger.h" -#include "timer.h" EventLogger eventLogger; -extern Timer timer; + //--------------------------------------------------------------------------- EventLogger::EventLogger(){ //QuestionnaireViewController * questionnaireViewController; @@ -33,6 +32,7 @@ // draw() - show path of last N scroll events - can be scrubbed along? // //--------------------------------------------------------------------------- + void EventLogger::init(){ readJsonToLog(ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME); @@ -41,7 +41,19 @@ testConnection(); logEvent(APP_STARTED); + + stringstream r; + r << LOGGING_SERVER_URL << "testConnection?jsontext=" << "{\"test\":\"test\"}&Content-Length=456"; + + NSString *urlstring; + urlstring = @"http://127.0.0.1:8080/testservice/testConnection?jsontext={\"objc post\":\"obj c post\"}"; + serverComms = [[ServerComms alloc] init]; + [serverComms postRequest:urlstring]; + + + urlstring = nil; } + //--------------------------------------------------------------------------- void EventLogger::questionnaireAnswersObtained(vector<int> answers, const char* userComments){ @@ -62,8 +74,10 @@ //--------------------------------------------------------------------------- bool EventLogger::sendToServer(string functionName, Json::Value jsonData, bool async = false){ bool sent; - string request; + stringstream request; + request << LOGGING_SERVER_URL << functionName << "?jsontext="; + /* if(functionName == "testConnection"){ request = "http://127.0.0.1:8080/testservice/testConnection?jsontext="; }else if(functionName == "questionnaire"){ @@ -71,6 +85,7 @@ }else if(functionName == "eventlog"){ request = "http://127.0.0.1:8080/testservice/eventlog?jsontext="; } + */ Json::FastWriter writer; string jsontext = writer.write( jsonData ); @@ -79,12 +94,14 @@ jsontext.erase(jsontext.length()-1); } - request.append(jsontext); + request << jsontext; + + cout << request.str(); if(!async){ ofURLFileLoader fileLoader; ofHttpResponse resp; - resp = fileLoader.get(request); + resp = fileLoader.get(request.str()); cout << "HTTP STATUS " << resp.status << "\n"; cout << "HTTP ERROR " << resp.error << "\n"; @@ -111,7 +128,7 @@ return sent; }else{ // async ofURLFileLoader fileLoader; - currentHTTPRequestID = ofLoadURLAsync(request, functionName); + currentHTTPRequestID = ofLoadURLAsync(request.str(), functionName); ofRegisterURLNotification(this); return true; // ??? @@ -178,7 +195,7 @@ //--------------------------------------------------------------------------- bool EventLogger::testConnection(){ Json::Value root; - root["test"] = "test"; + root["x"] = "y"; sendToServer("testConnection", root, true); @@ -256,8 +273,8 @@ // TODO if the total interaction time is greater than a certain amount && no questions answered - questionnaire time! cout << "Total interaction time: " << savedInteractionTime << '\n'; - timer.setInteractionTime(savedInteractionTime); - timer.setOrderFromPrevious(interfaceOrder); + //timer.setInteractionTime(savedInteractionTime); + //timer.setOrderFromPrevious(interfaceOrder); } @@ -272,7 +289,7 @@ if(!async){ bool success = sendToServer("eventlog", logsToJson(), async); if(!success){ - // try later + // try later : NOPE has maximum size nextUploadQty += UPLOAD_CHUNK_SIZE; }else{ @@ -310,15 +327,16 @@ // only called when doing supervised tests void EventLogger::newUser(){ cout<<"setup new user\n"; + deleteLogs(); nextUploadNumber = 0; deviceID = ofGetSystemTimeMicros(); savedInteractionTime = 0; totalInteractionTime = 0; sessionStartTime = ofGetSystemTime(); questionnaireCompleted = false; - questionnaireUploaded = false; - consentGiven = true; // other wise we wouldn't be doing this - ((testApp *)ofGetAppPtr())->introHidden(true); // hacky + questionnaireUploaded = false; + + ((testApp *)ofGetAppPtr())->showIntro(); } //--------------------------------------------------------------------------- @@ -326,7 +344,9 @@ void EventLogger::setUsername(const char *u){ userName = u; // start interaction clock - timer.startInteractionClock(); + + //timer.startInteractionClock(); + [((testApp *)ofGetAppPtr())->tsc startTimer]; } //--------------------------------------------------------------------------- void EventLogger::thinnedLogEvent(lEvent newEvent){ @@ -361,7 +381,6 @@ previousEvent = newEvent; } //--------------------------------------------------------------------------- -// log zoom event void EventLogger::logEvent(const leventType& evtType,const TwoVector& centre, const double& scale, const int& sliderID, const double& sliderVal){ //cout << "log: " << evtType << "\n"; @@ -386,7 +405,7 @@ case CHANGE_SLIDER: thinnedLogEvent(lEvent(evtType,sliderVal , 0.0 , sliderID)); break; - + // non thinned data case SAVE_PRESET: theEvents.push_back(lEvent(evtType,centre.x,centre.y)); // Code @@ -419,7 +438,16 @@ totalInteractionTime = savedInteractionTime + (ofGetSystemTime() - sessionStartTime); // milliseconds } - +//-------------------------------------------------------------------- +// called from newUser +void EventLogger::deleteLogs(){ + // the + theEvents.clear(); + string fname = ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME; + ofFile logFile(fname,ofFile::WriteOnly); + logFile << ""; + logFile.close(); +} //--------------------------------------------------------------------------- void EventLogger::exitAndSave(){ @@ -445,6 +473,7 @@ Json::Value jlogs = logsToJson(); ofFile logFile(fname,ofFile::WriteOnly); logFile << jlogs; + logFile.close(); } //---------------------------------------------------------------------------
--- a/presetManager.h Mon Feb 18 11:45:05 2013 +0000 +++ b/presetManager.h Fri Feb 22 17:41:38 2013 +0000 @@ -30,7 +30,6 @@ - //--------------------------------------------------------------------------- class Preset{ public:
--- a/presetManager.mm Mon Feb 18 11:45:05 2013 +0000 +++ b/presetManager.mm Fri Feb 22 17:41:38 2013 +0000 @@ -166,7 +166,7 @@ } //--------------------------------------------------------------------------- void PresetManager::showNameDialog(){ - if(!presetAlertShowing){ // this is to stop wierd infinite loop in ios5 (simulator) + if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator) presetAlertShowing = true; [presetAlertViewController showPresetNamePrompt]; @@ -263,8 +263,7 @@ cout << root; presetFile << root; - - + } //---------------------------------------------------------------------------
--- a/testApp.h Mon Feb 18 11:45:05 2013 +0000 +++ b/testApp.h Fri Feb 22 17:41:38 2013 +0000 @@ -25,11 +25,11 @@ #import "TopButtonViewController.h" #import "SliderViewController.h" #import "usernameAlertViewController.h" +#import "TimedSessionController.h" +#define OSC_HOST "169.254.1.1" +#define OSC_PORT 12345 -#define HOST "169.254.1.1" -#define PORT 12345 - -typedef enum {SLIDERS,ZOOMER,BOTH,INTRO,QUESTIONNAIRE}interfaceType; +typedef enum {SLIDERS,ZOOMER,BOTH,INTRO,QUESTIONNAIRE, HELP}interfaceType; class testApp : public ofxiPhoneApp { @@ -44,7 +44,7 @@ IntroViewController * introViewController; TopButtonViewController * topButtonViewController; SliderViewController * sliderViewController; - + TimedSessionController * tsc; int prevTouchX; int prevTouchY; double prevDist;
--- a/testApp.mm Mon Feb 18 11:45:05 2013 +0000 +++ b/testApp.mm Fri Feb 22 17:41:38 2013 +0000 @@ -17,14 +17,15 @@ //-------------------------------------------------------------- void testApp::setup(){ paused = true; - + ofBackground( 0, 0, 0 ); ofEnableAlphaBlending(); //ofEnableSmoothing(); - // open an outgoing connection to HOST:PORT - sender.setup( HOST, PORT ); + // open an outgoing connection to HOST:PORT for OSC + + sender.setup( OSC_HOST, OSC_PORT ); ofSetFrameRate(50); // reciever lastMoveTime = ofGetSystemTimeMicros(); @@ -83,7 +84,7 @@ [bottomTabViewController setAppRef:(id)this]; bottomTabViewController.view.frame = CGRectMake(0,getHeight()-44,getWidth(),44); - + bottomTabViewController.view.hidden = YES; ///// @@ -112,14 +113,21 @@ // initialise user logging stuff presetManager.startupLoadAll(); + tsc = [[TimedSessionController alloc] init]; + [tsc setAppRef:(id)this]; eventLogger.init(); // timer.init(); + whichInterfaceShowing = BOTH; // but timer will change this + - whichInterfaceShowing = SLIDERS; + if(eventLogger.questionnaireCompleted){ + [bottomTabViewController show:(id)this withSelection:1]; + } setAllGUISliders(theGridView.getParams()); // GO paused = false; + } @@ -193,8 +201,7 @@ // stop updating / drawing // if(eventLogger.questionnaireCompleted) return; - - paused = true; // need to set button + [topButtonViewController pausePressed:(id)this]; //stopSequencer @@ -216,18 +223,19 @@ eventLogger.questionnaireAnswersObtained(answers, userComments); // set "we've done questionnaire" to true in event logger - paused = false; whichInterfaceShowing = BOTH; // tell bottomtabviewcontroller - [bottomTabViewController show:(id)this]; + [bottomTabViewController show:(id)this withSelection:1]; + } //-------------------------------------------------------------- void testApp::showIntro(){ - paused = true; cout << "SHOW INTRO\n"; + [tsc cancelTimers]; + bottomTabViewController.view.hidden = YES; introViewController = [[IntroViewController alloc] initWithNibName:@"IntroViewController" bundle:nil]; [ofxiPhoneGetGLParentView() addSubview:introViewController.view]; @@ -242,7 +250,9 @@ void testApp::introHidden(bool OK){ if(OK){ eventLogger.consentGiven = true; - whichInterfaceShowing = BOTH; + // + // clear presets? + presetManager.clearAll(); // show username prompt [usernameAlertViewController showUserNamePrompt]; } @@ -293,9 +303,10 @@ // LEFT GUI sliderGUI = new ofxUICanvas(0,100,SLIDER_GUI_WIDTH,getHeight()); + // Uh.. loop this for(int i = 1; i<=10;i++){ - + ofxUISlider *slider; slider = (ofxUISlider *)sliderGUI->addWidgetDown(new ofxUISlider(length,dim,0.0,127,64,sliderParamNames[i-1])); slider->setDrawPadding(true); @@ -373,14 +384,14 @@ } //- void testApp::showHelp(){ - paused = true; + whichInterfaceShowing = HELP; seqStartStop(false); [topButtonViewController pausePressed:(id)this]; helpViewController.view.hidden = NO; eventLogger.logEvent(HELP_PRESSED); } void testApp::helpHidden(){ - paused = false; + whichInterfaceShowing = BOTH; // start seq? } @@ -477,7 +488,6 @@ } //-------------------------------------------------------------- void testApp::draw(){ - if(paused) return; switch (whichInterfaceShowing){ case SLIDERS: