summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsiqi <me@siqi.fr>2013-07-11 16:33:04 +0200
committersiqi <me@siqi.fr>2013-07-12 11:31:47 +0200
commita5f6c185ed1cff681b8002583def8389c5a07400 (patch)
tree4784f1064c2a7c413f1309907086a281ad1697ed
parent77826a484fc0eaceff4cfeacced0b8792743788c (diff)
accelormeter implemented but doesn't work well...
Change-Id: Ia5f2c1e706b21914ff483378e1bf8ffbdeb5eed6
-rw-r--r--android/sdremote/res/drawable-xhdpi/ic_launcher.pngbin6711 -> 8596 bytes
-rw-r--r--ios/iosremote/ic_launcher.pngbin0 -> 8596 bytes
-rw-r--r--ios/iosremote/ic_launcher@2x.pngbin0 -> 16827 bytes
-rw-r--r--ios/iosremote/iosremote.xcodeproj/project.pbxproj36
-rw-r--r--ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstatebin65520 -> 69357 bytes
-rw-r--r--ios/iosremote/iosremote/AppDelegate.h (renamed from ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h)9
-rw-r--r--ios/iosremote/iosremote/AppDelegate.m (renamed from ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m)12
-rw-r--r--ios/iosremote/iosremote/Communication/Client.m2
-rw-r--r--ios/iosremote/iosremote/Communication/CommandInterpreter.h2
-rw-r--r--ios/iosremote/iosremote/Communication/CommandInterpreter.m17
-rw-r--r--ios/iosremote/iosremote/Communication/SlideShow.m18
-rw-r--r--ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard300
-rw-r--r--ios/iosremote/iosremote/iosremote-Info.plist15
-rw-r--r--ios/iosremote/iosremote/main.m4
-rw-r--r--ios/iosremote/iosremote/slideShowPreviewTable_vc.h5
-rw-r--r--ios/iosremote/iosremote/slideShowPreviewTable_vc.m16
-rw-r--r--ios/iosremote/iosremote/slideShowSwipeInList.m6
-rw-r--r--ios/iosremote/iosremote/slideShow_vc.h8
-rw-r--r--ios/iosremote/iosremote/slideShow_vc.m220
-rw-r--r--ios/iosremote/iosremote/touchPointer_vc.h17
-rw-r--r--ios/iosremote/iosremote/touchPointer_vc.m61
21 files changed, 579 insertions, 169 deletions
diff --git a/android/sdremote/res/drawable-xhdpi/ic_launcher.png b/android/sdremote/res/drawable-xhdpi/ic_launcher.png
index 4a575a639d4a..3de2dcc88be7 100644
--- a/android/sdremote/res/drawable-xhdpi/ic_launcher.png
+++ b/android/sdremote/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ios/iosremote/ic_launcher.png b/ios/iosremote/ic_launcher.png
new file mode 100644
index 000000000000..3de2dcc88be7
--- /dev/null
+++ b/ios/iosremote/ic_launcher.png
Binary files differ
diff --git a/ios/iosremote/ic_launcher@2x.png b/ios/iosremote/ic_launcher@2x.png
new file mode 100644
index 000000000000..e336ce037b6d
--- /dev/null
+++ b/ios/iosremote/ic_launcher@2x.png
Binary files differ
diff --git a/ios/iosremote/iosremote.xcodeproj/project.pbxproj b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
index d35a80db7978..89b16eaef7a7 100644
--- a/ios/iosremote/iosremote.xcodeproj/project.pbxproj
+++ b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
@@ -32,7 +32,7 @@
57C6E3F7175E06E800E8BC5F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57C6E3F6175E06E800E8BC5F /* CoreGraphics.framework */; };
57C6E3FD175E06E800E8BC5F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E3FB175E06E800E8BC5F /* InfoPlist.strings */; };
57C6E3FF175E06E800E8BC5F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E3FE175E06E800E8BC5F /* main.m */; };
- 57C6E403175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */; };
+ 57C6E403175E06E800E8BC5F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C6E402175E06E800E8BC5F /* AppDelegate.m */; };
57C6E405175E06E800E8BC5F /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E404175E06E800E8BC5F /* Default.png */; };
57C6E407175E06E800E8BC5F /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E406175E06E800E8BC5F /* Default@2x.png */; };
57C6E409175E06E800E8BC5F /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57C6E408175E06E800E8BC5F /* Default-568h@2x.png */; };
@@ -44,6 +44,11 @@
57CC48C6178B42A400075DE4 /* timer_pause_btn.png in Resources */ = {isa = PBXBuildFile; fileRef = 57CC48C4178B42A400075DE4 /* timer_pause_btn.png */; };
57CC48C7178B42A400075DE4 /* timer_resume_btn.png in Resources */ = {isa = PBXBuildFile; fileRef = 57CC48C5178B42A400075DE4 /* timer_resume_btn.png */; };
57CFED9917838FDC00E82E05 /* EditableTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */; };
+ 57DC7003178D82610050FC58 /* ic_launcher.png in Resources */ = {isa = PBXBuildFile; fileRef = 57DC7002178D82610050FC58 /* ic_launcher.png */; };
+ 57DC7005178D82940050FC58 /* ic_launcher@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 57DC7004178D82940050FC58 /* ic_launcher@2x.png */; };
+ 57DC7007178D84490050FC58 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57DC7006178D84490050FC58 /* CoreMotion.framework */; };
+ 57DC700F178E03330050FC58 /* touchPointer_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57DC700E178E03330050FC58 /* touchPointer_vc.m */; };
+ 57DC7012178E16A40050FC58 /* setRecursiveUserInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */; };
57FE71E31785C61400B50125 /* pinValidation_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E21785C61400B50125 /* pinValidation_vc.m */; };
57FE71E61785D7FE00B50125 /* slideShowPreview_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */; };
57FE71E917861A9000B50125 /* slideShowPreviewTable_vc.m in Sources */ = {isa = PBXBuildFile; fileRef = 57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */; };
@@ -88,8 +93,8 @@
57C6E3FC175E06E800E8BC5F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
57C6E3FE175E06E800E8BC5F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
57C6E400175E06E800E8BC5F /* iosremote-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iosremote-Prefix.pch"; sourceTree = "<group>"; };
- 57C6E401175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libreoffice_sdremoteAppDelegate.h; sourceTree = "<group>"; };
- 57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = libreoffice_sdremoteAppDelegate.m; sourceTree = "<group>"; };
+ 57C6E401175E06E800E8BC5F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ 57C6E402175E06E800E8BC5F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
57C6E404175E06E800E8BC5F /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
57C6E406175E06E800E8BC5F /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = "<group>"; };
57C6E408175E06E800E8BC5F /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
@@ -106,6 +111,13 @@
57CC48C5178B42A400075DE4 /* timer_resume_btn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = timer_resume_btn.png; path = iosremote/timer_resume_btn.png; sourceTree = "<group>"; };
57CFED9717838FDC00E82E05 /* EditableTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditableTableViewCell.h; sourceTree = "<group>"; };
57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditableTableViewCell.m; sourceTree = "<group>"; };
+ 57DC7002178D82610050FC58 /* ic_launcher.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_launcher.png; sourceTree = "<group>"; };
+ 57DC7004178D82940050FC58 /* ic_launcher@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_launcher@2x.png"; sourceTree = "<group>"; };
+ 57DC7006178D84490050FC58 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
+ 57DC700D178E03330050FC58 /* touchPointer_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = touchPointer_vc.h; sourceTree = "<group>"; };
+ 57DC700E178E03330050FC58 /* touchPointer_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = touchPointer_vc.m; sourceTree = "<group>"; };
+ 57DC7010178E16A40050FC58 /* setRecursiveUserInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = setRecursiveUserInteraction.h; sourceTree = "<group>"; };
+ 57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = setRecursiveUserInteraction.m; sourceTree = "<group>"; };
57FE71E11785C61300B50125 /* pinValidation_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pinValidation_vc.h; path = Communication/pinValidation_vc.h; sourceTree = "<group>"; };
57FE71E21785C61400B50125 /* pinValidation_vc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = pinValidation_vc.m; path = Communication/pinValidation_vc.m; sourceTree = "<group>"; };
57FE71E41785D7FE00B50125 /* slideShowPreview_vc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slideShowPreview_vc.h; sourceTree = "<group>"; };
@@ -120,6 +132,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 57DC7007178D84490050FC58 /* CoreMotion.framework in Frameworks */,
BE9EBD071765BF0800283FD2 /* CoreImage.framework in Frameworks */,
57C6E3F3175E06E800E8BC5F /* UIKit.framework in Frameworks */,
57C6E3F5175E06E800E8BC5F /* Foundation.framework in Frameworks */,
@@ -139,6 +152,10 @@
5770173E178B08A800B99793 /* SWReavealMainController.m */,
57701740178B0A6800B99793 /* slideShowSwipeInList.h */,
57701741178B0A6900B99793 /* slideShowSwipeInList.m */,
+ 57DC700D178E03330050FC58 /* touchPointer_vc.h */,
+ 57DC700E178E03330050FC58 /* touchPointer_vc.m */,
+ 57DC7010178E16A40050FC58 /* setRecursiveUserInteraction.h */,
+ 57DC7011178E16A40050FC58 /* setRecursiveUserInteraction.m */,
);
name = slideShow;
sourceTree = "<group>";
@@ -186,6 +203,9 @@
57C6E3E6175E06E800E8BC5F = {
isa = PBXGroup;
children = (
+ 57DC7006178D84490050FC58 /* CoreMotion.framework */,
+ 57DC7004178D82940050FC58 /* ic_launcher@2x.png */,
+ 57DC7002178D82610050FC58 /* ic_launcher.png */,
57AEEDAA1788D7B2007F4F97 /* Assets */,
BE9EBD061765BF0800283FD2 /* CoreImage.framework */,
57C6E425175E076900E8BC5F /* Communication */,
@@ -221,8 +241,8 @@
57FE71E11785C61300B50125 /* pinValidation_vc.h */,
57FE71E21785C61400B50125 /* pinValidation_vc.m */,
57AEEDAB1789443D007F4F97 /* slideShowPreview */,
- 57C6E401175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.h */,
- 57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */,
+ 57C6E401175E06E800E8BC5F /* AppDelegate.h */,
+ 57C6E402175E06E800E8BC5F /* AppDelegate.m */,
571BFAD2178AB7BA00EF1BDB /* slideShow */,
5753DD9717834D7100DB71BB /* newServer_vc.h */,
5753DD9817834D7100DB71BB /* newServer_vc.m */,
@@ -341,6 +361,8 @@
571D4808178B2F080063D93B /* timer_start_btn.png in Resources */,
57CC48C6178B42A400075DE4 /* timer_pause_btn.png in Resources */,
57CC48C7178B42A400075DE4 /* timer_resume_btn.png in Resources */,
+ 57DC7003178D82610050FC58 /* ic_launcher.png in Resources */,
+ 57DC7005178D82940050FC58 /* ic_launcher@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -352,7 +374,7 @@
buildActionMask = 2147483647;
files = (
57C6E3FF175E06E800E8BC5F /* main.m in Sources */,
- 57C6E403175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m in Sources */,
+ 57C6E403175E06E800E8BC5F /* AppDelegate.m in Sources */,
57C6E42E175E076900E8BC5F /* Client.m in Sources */,
57C6E42F175E076900E8BC5F /* CommunicationManager.m in Sources */,
57C6E430175E076900E8BC5F /* CommandInterpreter.m in Sources */,
@@ -370,6 +392,8 @@
57701739178AC83E00B99793 /* SWRevealViewController.m in Sources */,
5770173F178B08A800B99793 /* SWReavealMainController.m in Sources */,
57701742178B0A6900B99793 /* slideShowSwipeInList.m in Sources */,
+ 57DC700F178E03330050FC58 /* touchPointer_vc.m in Sources */,
+ 57DC7012178E16A40050FC58 /* setRecursiveUserInteraction.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
index 8869eee3efe1..a7650de0a28e 100644
--- a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
+++ b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h b/ios/iosremote/iosremote/AppDelegate.h
index 9b87a86735c7..6e61ec1fa0eb 100644
--- a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.h
+++ b/ios/iosremote/iosremote/AppDelegate.h
@@ -7,9 +7,16 @@
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#import <UIKit/UIKit.h>
+#import <CoreMotion/CoreMotion.h>
-@interface libreoffice_sdremoteAppDelegate : UIResponder <UIApplicationDelegate>
+@class ViewController;
+@interface AppDelegate : UIResponder <UIApplicationDelegate> {
+ CMMotionManager *motionManager;
+}
+
+@property (readonly) CMMotionManager *motionManager;
@property (strong, nonatomic) UIWindow *window;
+@property (strong, nonatomic) ViewController *viewController;
@end
diff --git a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m b/ios/iosremote/iosremote/AppDelegate.m
index 0123ac6c38d9..b548d69ade9e 100644
--- a/ios/iosremote/iosremote/libreoffice_sdremoteAppDelegate.m
+++ b/ios/iosremote/iosremote/AppDelegate.m
@@ -6,16 +6,22 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#import "libreoffice_sdremoteAppDelegate.h"
+#import "AppDelegate.h"
-@implementation libreoffice_sdremoteAppDelegate
+@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
return YES;
}
-
+
+- (CMMotionManager *)motionManager
+{
+ if (!motionManager) motionManager = [[CMMotionManager alloc] init];
+ return motionManager;
+}
+
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
diff --git a/ios/iosremote/iosremote/Communication/Client.m b/ios/iosremote/iosremote/Communication/Client.m
index ed8d3af2717d..09fdf6a259ea 100644
--- a/ios/iosremote/iosremote/Communication/Client.m
+++ b/ios/iosremote/iosremote/Communication/Client.m
@@ -195,7 +195,7 @@ int count = 0;
}
}
}
- NSLog(@"Command:%@", str);
+// NSLog(@"Command:%@", str);
NSArray *commands = [str componentsSeparatedByString:@"\n"];
[self.receiver parse:commands];
data = nil;
diff --git a/ios/iosremote/iosremote/Communication/CommandInterpreter.h b/ios/iosremote/iosremote/Communication/CommandInterpreter.h
index 287cdc598b2f..806e91226b03 100644
--- a/ios/iosremote/iosremote/Communication/CommandInterpreter.h
+++ b/ios/iosremote/iosremote/Communication/CommandInterpreter.h
@@ -13,7 +13,7 @@
@interface CommandInterpreter : NSObject
-@property (nonatomic, strong) SlideShow* slideShow;
+@property (atomic, strong) SlideShow* slideShow;
- (void) parse:(NSArray *)cmd;
diff --git a/ios/iosremote/iosremote/Communication/CommandInterpreter.m b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
index fb26da51699c..c3455ca71334 100644
--- a/ios/iosremote/iosremote/Communication/CommandInterpreter.m
+++ b/ios/iosremote/iosremote/Communication/CommandInterpreter.m
@@ -20,6 +20,8 @@
@synthesize slideShow = _slideShow;
+dispatch_queue_t backgroundQueue;
+
- (CommandInterpreter *) init
{
self = [super init];
@@ -45,7 +47,7 @@
marker = 2;
}
else if ([instruction isEqualToString:STATUS_PAIRING_PAIRED]){
- NSLog(@"Paired command: %@", command);
+// NSLog(@"Paired command: %@", command);
[[NSNotificationCenter defaultCenter] postNotificationName:STATUS_PAIRING_PAIRED
object:nil];
marker = 2;
@@ -77,14 +79,17 @@
marker = 3;
} else if ([instruction isEqualToString:@"slide_preview"]){
NSLog(@"Interpreter: slide_preview");
- uint slideNumber = [[command objectAtIndex:1] integerValue];
- NSString * imageData = [command objectAtIndex:2];
- [self.slideShow putImage:imageData
- AtIndex:slideNumber];
- [[NSNotificationCenter defaultCenter] postNotificationName:MSG_SLIDE_PREVIEW object:[NSNumber numberWithUnsignedInt:slideNumber]];
+ backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
+ dispatch_async(backgroundQueue, ^(void) {
+ uint slideNumber = [[command objectAtIndex:1] integerValue];
+ NSString * imageData = [command objectAtIndex:2];
+ [self.slideShow putImage:imageData
+ AtIndex:slideNumber];
+ });
marker = 4;
} else if ([instruction isEqualToString:@"slide_notes"]){
NSLog(@"Interpreter: slide_notes");
+ backgroundQueue = dispatch_queue_create("com.libreoffice.iosremote", NULL);
uint slideNumber = [[command objectAtIndex:1] integerValue];
NSMutableString *notes = [[NSMutableString alloc] init];
for (int i = 2; i<command.count; ++i) {
diff --git a/ios/iosremote/iosremote/Communication/SlideShow.m b/ios/iosremote/iosremote/Communication/SlideShow.m
index 3ec06b8d77df..8f890b84df5a 100644
--- a/ios/iosremote/iosremote/Communication/SlideShow.m
+++ b/ios/iosremote/iosremote/Communication/SlideShow.m
@@ -31,6 +31,7 @@
@synthesize secondaryDelegate = _secondaryDelegate;
dispatch_queue_t backgroundQueue;
+NSLock *dictLock;
- (SlideShow *) init{
self = [super init];
@@ -56,6 +57,7 @@ dispatch_queue_t backgroundQueue;
object:nil
queue:mainQueue
usingBlock:^(NSNotification *note) {
+ dispatch_async(backgroundQueue, ^(void) {
if ([[self.loadBuffer allKeysForObject:[NSNumber numberWithInt:[[[note userInfo] objectForKey:@"index"] intValue]]] count]) {
NSArray * tagArray = [self.loadBuffer allKeysForObject:[NSNumber numberWithInt:[[[note userInfo] objectForKey:@"index"] intValue]]];
for (NSNumber *tag in tagArray) {
@@ -67,7 +69,9 @@ dispatch_queue_t backgroundQueue;
if ([view isKindOfClass:[UIImageView class]]){
UIImage *image = [self.imagesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
if (image) {
- [(UIImageView *)view setImage:image];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [(UIImageView *)view setImage:image];
+ });
[self.loadBuffer removeObjectForKey:tag];
}
}
@@ -75,27 +79,35 @@ dispatch_queue_t backgroundQueue;
// NSLog(@"Async notes");
NSString *note = [self.notesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
if (note) {
- [(UIWebView *)view loadHTMLString:note baseURL:nil];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [(UIWebView *)view loadHTMLString:note baseURL:nil];
+ });
[self.loadBuffer removeObjectForKey:tag];
}
} else if ([view isKindOfClass:[UITableViewCell class]]){
UIImage *image = [self.imagesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
if (image){
UIImageView *imageView = (UIImageView *)[view viewWithTag:1];
- [imageView setImage:image];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [imageView setImage:image];
+ });
[self.loadBuffer removeObjectForKey:tag];
}
}
}
}
+ });
}];
+ dictLock = [[NSLock alloc] init];
return self;
}
- (void) putImage: (NSString *)img AtIndex: (uint) index{
NSData* data = [NSData dataWithBase64String:img];
UIImage* image = [UIImage imageWithData:data];
+ [dictLock lock];
[self.imagesDictionary setObject:image forKey:[NSNumber numberWithUnsignedInt:index]];
+ [dictLock unlock];
[[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_ready"
object:nil
userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"index"]];
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
index b64e5f59b175..5fbdb2392689 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autolayout.storyboard
@@ -374,70 +374,6 @@
<rect key="frame" x="0.0" y="20" width="320" height="548"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
- <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="3od-5c-yzI" userLabel="Bottom">
- <subviews>
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
- <constraints>
- <constraint firstAttribute="width" constant="93" id="tXD-cs-5jt"/>
- </constraints>
- <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
- <state key="normal" backgroundImage="released_previous_button.png">
- <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
- <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
- </state>
- <state key="highlighted" backgroundImage="pushed_previous_button.png">
- <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- </state>
- <connections>
- <action selector="previousSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="DAf-Qp-7KW"/>
- </connections>
- </button>
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XDZ-bs-OUM">
- <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
- <state key="normal" backgroundImage="released_next_button.png">
- <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
- <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
- </state>
- <state key="highlighted" backgroundImage="pushed_next_button.png">
- <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- </state>
- <connections>
- <action selector="nextSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="qTl-Ib-3Z8"/>
- </connections>
- </button>
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kMb-xm-ope">
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
- <constraints>
- <constraint firstAttribute="width" constant="59" id="Kjm-ct-oJ3"/>
- <constraint firstAttribute="height" constant="60" id="xrc-bW-vTq"/>
- </constraints>
- <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
- <state key="normal" title="Button" image="pointer.png">
- <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
- <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
- </state>
- <state key="highlighted" image="pointer_pushed.png">
- <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- </state>
- <connections>
- <action selector="pointerAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="KYl-be-1wN"/>
- </connections>
- </button>
- </subviews>
- <color key="backgroundColor" red="0.93333333333333335" green="0.93333333333333335" blue="0.93333333333333335" alpha="1" colorSpace="deviceRGB"/>
- <constraints>
- <constraint firstItem="XDZ-bs-OUM" firstAttribute="centerY" secondItem="3od-5c-yzI" secondAttribute="centerY" type="default" id="992-ZE-DXX"/>
- <constraint firstItem="kMb-xm-ope" firstAttribute="centerY" secondItem="vh9-Zy-DPu" secondAttribute="centerY" type="default" id="DAr-Sf-YhO"/>
- <constraint firstAttribute="trailing" secondItem="XDZ-bs-OUM" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="Eqp-Q3-L92"/>
- <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="XDZ-bs-OUM" secondAttribute="top" type="default" id="H9E-FR-J2C"/>
- <constraint firstItem="vh9-Zy-DPu" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="SQd-eE-VN0"/>
- <constraint firstAttribute="height" constant="88" type="user" id="dBc-X5-XIU"/>
- <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="vh9-Zy-DPu" secondAttribute="top" type="default" id="r6I-Jb-2lm"/>
- <constraint firstItem="kMb-xm-ope" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="132" id="tY1-mj-gK5"/>
- <constraint firstItem="vh9-Zy-DPu" firstAttribute="width" secondItem="XDZ-bs-OUM" secondAttribute="width" type="user" id="x0P-o6-T4k"/>
- <constraint firstItem="kMb-xm-ope" firstAttribute="height" secondItem="XDZ-bs-OUM" secondAttribute="height" type="user" id="zeV-2j-i1K"/>
- </constraints>
- </view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YvB-Gp-Fvr" userLabel="Preview">
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="bZq-z2-OKU">
@@ -518,33 +454,204 @@
<constraint firstItem="Y23-iV-GJx" firstAttribute="width" secondItem="xGi-A7-hat" secondAttribute="width" type="user" id="uLC-ir-IGd"/>
</constraints>
</view>
+ <view hidden="YES" opaque="NO" userInteractionEnabled="NO" alpha="0.60000000000000009" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uSh-Ne-BdH" userLabel="blockview">
+ <color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/>
+ <accessibility key="accessibilityConfiguration">
+ <accessibilityTraits key="traits" none="YES" notEnabled="YES"/>
+ </accessibility>
+ </view>
+ <scrollView hidden="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" verticalCompressionResistancePriority="1000" scrollEnabled="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sco-8x-zSx">
+ <subviews>
+ <imageView hidden="YES" userInteractionEnabled="NO" alpha="0.0" contentMode="scaleAspectFit" image="ic_launcher@2x.png" translatesAutoresizingMaskIntoConstraints="NO" id="ExH-sw-Z1i">
+ <constraints>
+ <constraint firstAttribute="height" constant="251" type="user" id="fag-vU-Fek"/>
+ </constraints>
+ </imageView>
+ <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iCc-m2-vR5" userLabel="pointer">
+ <color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="5" id="Pvc-0L-c6j"/>
+ <constraint firstAttribute="height" constant="5" id="pYn-Z0-Lv4"/>
+ </constraints>
+ </view>
+ </subviews>
+ <constraints>
+ <constraint firstItem="iCc-m2-vR5" firstAttribute="centerY" secondItem="ExH-sw-Z1i" secondAttribute="centerY" type="user" id="1ij-Ea-epv"/>
+ <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerX" secondItem="sco-8x-zSx" secondAttribute="centerX" type="default" id="HzU-KT-Di4"/>
+ <constraint firstItem="ExH-sw-Z1i" firstAttribute="centerY" secondItem="sco-8x-zSx" secondAttribute="centerY" type="default" id="Jp6-hL-zFM"/>
+ <constraint firstItem="ExH-sw-Z1i" firstAttribute="leading" secondItem="sco-8x-zSx" secondAttribute="leading" type="default" id="Mlu-wO-svM"/>
+ <constraint firstItem="iCc-m2-vR5" firstAttribute="centerX" secondItem="ExH-sw-Z1i" secondAttribute="centerX" type="user" id="W0H-CC-5rY"/>
+ <constraint firstItem="ExH-sw-Z1i" firstAttribute="trailing" secondItem="sco-8x-zSx" secondAttribute="trailing" type="default" id="cE4-Q3-f4A"/>
+ <constraint firstAttribute="bottom" secondItem="ExH-sw-Z1i" secondAttribute="bottom" constant="149" id="vm4-SB-sLt"/>
+ </constraints>
+ </scrollView>
+ <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="3od-5c-yzI" userLabel="Bottom">
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
+ <constraints>
+ <constraint firstAttribute="width" constant="93" id="tXD-cs-5jt"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+ <state key="normal" backgroundImage="released_previous_button.png">
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <state key="highlighted" backgroundImage="pushed_previous_button.png">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="previousSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="DAf-Qp-7KW"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XDZ-bs-OUM">
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+ <state key="normal" backgroundImage="released_next_button.png">
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <state key="highlighted" backgroundImage="pushed_next_button.png">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="nextSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="qTl-Ib-3Z8"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kMb-xm-ope">
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="59" id="Kjm-ct-oJ3"/>
+ <constraint firstAttribute="height" constant="60" id="xrc-bW-vTq"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+ <state key="normal" title="Button" image="pointer.png">
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <state key="highlighted" image="pointer_pushed.png">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="accPointerAction:" destination="Ivv-3X-Nhr" eventType="touchDown" id="35J-B2-GIE"/>
+ <action selector="accPointerAction:" destination="Ivv-3X-Nhr" eventType="touchUpOutside" id="F8W-M1-8Lb"/>
+ <action selector="accPointerAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="Lb1-HF-wdh"/>
+ <action selector="pointerAction:" destination="Ivv-3X-Nhr" eventType="touchDown" id="gK9-ff-k1g"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.93333333333333335" green="0.93333333333333335" blue="0.93333333333333335" alpha="1" colorSpace="deviceRGB"/>
+ <constraints>
+ <constraint firstItem="XDZ-bs-OUM" firstAttribute="centerY" secondItem="3od-5c-yzI" secondAttribute="centerY" type="default" id="992-ZE-DXX"/>
+ <constraint firstItem="kMb-xm-ope" firstAttribute="centerY" secondItem="vh9-Zy-DPu" secondAttribute="centerY" type="default" id="DAr-Sf-YhO"/>
+ <constraint firstAttribute="trailing" secondItem="XDZ-bs-OUM" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="Eqp-Q3-L92"/>
+ <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="XDZ-bs-OUM" secondAttribute="top" type="default" id="H9E-FR-J2C"/>
+ <constraint firstItem="vh9-Zy-DPu" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="SQd-eE-VN0"/>
+ <constraint firstAttribute="height" constant="88" type="user" id="dBc-X5-XIU"/>
+ <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="vh9-Zy-DPu" secondAttribute="top" type="default" id="r6I-Jb-2lm"/>
+ <constraint firstItem="kMb-xm-ope" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="132" id="tY1-mj-gK5"/>
+ <constraint firstItem="vh9-Zy-DPu" firstAttribute="width" secondItem="XDZ-bs-OUM" secondAttribute="width" type="user" id="x0P-o6-T4k"/>
+ <constraint firstItem="kMb-xm-ope" firstAttribute="height" secondItem="XDZ-bs-OUM" secondAttribute="height" type="user" id="zeV-2j-i1K"/>
+ </constraints>
+ </view>
</subviews>
<color key="backgroundColor" red="0.90196079015731812" green="0.90196079015731812" blue="0.90196079015731812" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="evg-Ah-Kcw" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" constant="-13" id="5Ku-go-4Y7"/>
<constraint firstItem="3od-5c-yzI" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="5et-XH-ZVD"/>
- <constraint firstItem="3od-5c-yzI" firstAttribute="top" secondItem="evg-Ah-Kcw" secondAttribute="bottom" type="user" id="7vy-A8-l8f"/>
+ <constraint firstItem="sco-8x-zSx" firstAttribute="centerY" secondItem="Xty-aF-WDv" secondAttribute="centerY" type="default" id="5g1-xQ-Rjo"/>
+ <constraint firstItem="uSh-Ne-BdH" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" type="default" id="5oi-ag-u6c"/>
+ <constraint firstAttribute="bottom" secondItem="uSh-Ne-BdH" secondAttribute="bottom" constant="-92" id="7f7-gO-D5h"/>
+ <constraint firstItem="3od-5c-yzI" firstAttribute="bottom" secondItem="Xty-aF-WDv" secondAttribute="bottom" type="default" id="9qT-8J-cJX"/>
+ <constraint firstItem="sco-8x-zSx" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="-1" id="ABt-Qu-Csc"/>
<constraint firstItem="YvB-Gp-Fvr" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="5" type="user" id="DoA-5l-NFS"/>
<constraint firstItem="evg-Ah-Kcw" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="FDk-Bs-3cI"/>
<constraint firstItem="YvB-Gp-Fvr" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="FXg-Ij-nfl"/>
- <constraint firstItem="evg-Ah-Kcw" firstAttribute="centerX" secondItem="3od-5c-yzI" secondAttribute="centerX" type="default" id="HOg-6M-zJ9"/>
+ <constraint firstItem="uSh-Ne-BdH" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="HAC-vD-Hqj"/>
+ <constraint firstItem="uSh-Ne-BdH" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="HeG-j9-sqU"/>
<constraint firstItem="YvB-Gp-Fvr" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="I4g-8o-Kbt"/>
+ <constraint firstItem="3od-5c-yzI" firstAttribute="centerX" secondItem="evg-Ah-Kcw" secondAttribute="centerX" type="default" id="OBV-yE-3pQ"/>
+ <constraint firstItem="sco-8x-zSx" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="TvG-hv-kxd"/>
<constraint firstItem="3od-5c-yzI" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="eJ5-5R-zZM"/>
- <constraint firstAttribute="bottom" secondItem="3od-5c-yzI" secondAttribute="bottom" type="user" id="sob-HW-K69"/>
+ <constraint firstItem="sco-8x-zSx" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="tDh-lz-AgT"/>
+ <constraint firstAttribute="bottom" secondItem="evg-Ah-Kcw" secondAttribute="bottom" constant="88" id="uDo-cI-z18"/>
</constraints>
</view>
<connections>
+ <outlet property="blockingView" destination="uSh-Ne-BdH" id="g9R-1S-DJA"/>
+ <outlet property="bottomView" destination="3od-5c-yzI" id="bAX-eX-GfA"/>
<outlet property="lecturer_notes" destination="xGi-A7-hat" id="Cng-HM-0wW"/>
+ <outlet property="movingPointer" destination="iCc-m2-vR5" id="Y9t-hw-qhs"/>
<outlet property="notesView" destination="evg-Ah-Kcw" id="mlQ-Ez-ekQ"/>
+ <outlet property="pointerBtn" destination="kMb-xm-ope" id="0Ig-tz-vu5"/>
<outlet property="secondarySlideView" destination="B2g-rO-b9G" id="98R-qU-Psa"/>
<outlet property="slideNumber" destination="3BV-KX-Qla" id="681-YP-k0T"/>
<outlet property="slideView" destination="bZq-z2-OKU" id="yu0-P8-F3v"/>
+ <outlet property="touchPointerImage" destination="ExH-sw-Z1i" id="I0L-0P-zSk"/>
+ <outlet property="touchPointerScrollView" destination="sco-8x-zSx" id="7B3-1T-ZI8"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Uei-nM-J1S" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2290" y="1807"/>
</scene>
+ <!--Touch Pointer vc-->
+ <scene sceneID="lb3-jJ-4Di">
+ <objects>
+ <viewController id="hES-Cx-oSf" customClass="touchPointer_vc" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="5Hd-U9-nNh">
+ <rect key="frame" x="0.0" y="20" width="320" height="548"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mRz-Gd-KLu">
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wNe-aT-xcf">
+ <constraints>
+ <constraint firstAttribute="width" constant="214" id="HOe-Si-LIu"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+ <state key="normal" title="Back">
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <state key="highlighted">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="dismissModal:" destination="hES-Cx-oSf" eventType="touchUpInside" id="tXy-a7-aOT"/>
+ </connections>
+ </button>
+ <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="yBi-pu-DQa">
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="242" id="i2l-Xn-OBb"/>
+ </constraints>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/>
+ <constraints>
+ <constraint firstAttribute="trailing" secondItem="yBi-pu-DQa" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="OMK-2m-vmJ"/>
+ <constraint firstAttribute="bottom" secondItem="wNe-aT-xcf" secondAttribute="bottom" constant="52" id="fBY-Iv-Mm5"/>
+ <constraint firstItem="yBi-pu-DQa" firstAttribute="leading" secondItem="mRz-Gd-KLu" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="la5-51-57u"/>
+ <constraint firstItem="wNe-aT-xcf" firstAttribute="centerX" secondItem="yBi-pu-DQa" secondAttribute="centerX" type="default" id="qSd-nY-2JL"/>
+ <constraint firstItem="yBi-pu-DQa" firstAttribute="top" secondItem="mRz-Gd-KLu" secondAttribute="top" constant="129" id="seB-Oa-d9u"/>
+ </constraints>
+ </view>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstItem="mRz-Gd-KLu" firstAttribute="leading" secondItem="5Hd-U9-nNh" secondAttribute="leading" constant="-20" id="JBk-oD-bnz"/>
+ <constraint firstItem="mRz-Gd-KLu" firstAttribute="centerY" secondItem="5Hd-U9-nNh" secondAttribute="centerY" type="default" id="Tvh-8g-313"/>
+ <constraint firstItem="mRz-Gd-KLu" firstAttribute="top" secondItem="5Hd-U9-nNh" secondAttribute="top" constant="-20" id="XTc-4e-YRi"/>
+ <constraint firstItem="mRz-Gd-KLu" firstAttribute="centerX" secondItem="5Hd-U9-nNh" secondAttribute="centerX" type="default" id="tNV-xj-5gl"/>
+ </constraints>
+ </view>
+ <connections>
+ <outlet property="imageView" destination="yBi-pu-DQa" id="XE8-h0-pu0"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="gog-t4-scM" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="2807" y="1752"/>
+ </scene>
<!--Slide Show Preview Table vc-->
<scene sceneID="Tvi-bD-vMC">
<objects>
@@ -703,6 +810,7 @@
</scene>
</scenes>
<resources>
+ <image name="ic_launcher@2x.png" width="114" height="114"/>
<image name="impress.jpeg" width="204" height="204"/>
<image name="pointer.png" width="143" height="147"/>
<image name="pointer_pushed.png" width="143" height="147"/>
@@ -713,64 +821,6 @@
<image name="timer_clear_btn.png" width="74" height="74"/>
<image name="timer_start_btn.png" width="74" height="74"/>
</resources>
- <classes>
- <class className="EditableTableViewCell" superclassName="UITableViewCell">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/EditableTableViewCell.h"/>
- </class>
- <class className="NSLayoutConstraint" superclassName="NSObject">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/NSLayoutConstraint.h"/>
- </class>
- <class className="SWRevealViewController" superclassName="UIViewController">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/SWRevealViewController.h"/>
- </class>
- <class className="newServerViewController" superclassName="UITableViewController">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/newServerViewController.h"/>
- <relationships>
- <relationship kind="action" name="save:"/>
- </relationships>
- </class>
- <class className="pinValidation_vc" superclassName="UIViewController">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/pinValidation_vc.h"/>
- <relationships>
- <relationship kind="outlet" name="pinLabel" candidateClass="UILabel"/>
- <relationship kind="outlet" name="statusLabel" candidateClass="UILabel"/>
- </relationships>
- </class>
- <class className="server_list_vc" superclassName="UITableViewController">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/server_list_vc.h"/>
- <relationships>
- <relationship kind="outlet" name="serverTable" candidateClass="UITableView"/>
- </relationships>
- </class>
- <class className="slideShowPreviewTable_vc" superclassName="UITableViewController">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/slideShowPreviewTable_vc.h"/>
- <relationships>
- <relationship kind="outlet" name="optionsTable" candidateClass="UITableView"/>
- </relationships>
- </class>
- <class className="slideShowSwipeInList" superclassName="UITableViewController">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/slideShowSwipeInList.h"/>
- <relationships>
- <relationship kind="action" name="stopWatchClear:"/>
- <relationship kind="action" name="stopWatchStart:"/>
- <relationship kind="outlet" name="slidesTable" candidateClass="UITableView"/>
- </relationships>
- </class>
- <class className="slideShow_vc" superclassName="UIViewController">
- <source key="sourceIdentifier" type="project" relativePath="./Classes/slideShow_vc.h"/>
- <relationships>
- <relationship kind="action" name="nextSlideAction:"/>
- <relationship kind="action" name="pointerAction:"/>
- <relationship kind="action" name="previousSlideAction:"/>
- <relationship kind="outlet" name="lecturer_notes" candidateClass="UIWebView"/>
- <relationship kind="outlet" name="notesView" candidateClass="UIView"/>
- <relationship kind="outlet" name="revealButtonItem" candidateClass="UIBarButtonItem"/>
- <relationship kind="outlet" name="secondarySlideView" candidateClass="UIImageView"/>
- <relationship kind="outlet" name="slideNumber" candidateClass="UILabel"/>
- <relationship kind="outlet" name="slideView" candidateClass="UIImageView"/>
- </relationships>
- </class>
- </classes>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
diff --git a/ios/iosremote/iosremote/iosremote-Info.plist b/ios/iosremote/iosremote/iosremote-Info.plist
index 1dd50c9f0152..cb575a0ef2b6 100644
--- a/ios/iosremote/iosremote/iosremote-Info.plist
+++ b/ios/iosremote/iosremote/iosremote-Info.plist
@@ -8,6 +8,19 @@
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIcons</key>
+ <dict>
+ <key>CFBundlePrimaryIcon</key>
+ <dict>
+ <key>CFBundleIconFiles</key>
+ <array>
+ <string>ic_launcher.png</string>
+ <string>ic_launcher@2x.png</string>
+ </array>
+ <key>UIPrerenderedIcon</key>
+ <true/>
+ </dict>
+ </dict>
<key>CFBundleIdentifier</key>
<string>org.libreoffice.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
@@ -26,6 +39,8 @@
<true/>
<key>UIMainStoryboardFile</key>
<string>iPhone_autolayout</string>
+ <key>UIPrerenderedIcon</key>
+ <true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
diff --git a/ios/iosremote/iosremote/main.m b/ios/iosremote/iosremote/main.m
index 51ae8dc7034a..ff07e61834a9 100644
--- a/ios/iosremote/iosremote/main.m
+++ b/ios/iosremote/iosremote/main.m
@@ -8,11 +8,11 @@
#import <UIKit/UIKit.h>
-#import "libreoffice_sdremoteAppDelegate.h"
+#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([libreoffice_sdremoteAppDelegate class]));
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc.h b/ios/iosremote/iosremote/slideShowPreviewTable_vc.h
index 46fe904d7c66..0b9c4615f474 100644
--- a/ios/iosremote/iosremote/slideShowPreviewTable_vc.h
+++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc.h
@@ -8,6 +8,11 @@
#import <UIKit/UIKit.h>
+#define OPTION_TIMER @"Timer auto-start"
+#define OPTION_POINTER @"Touch pointer"
+#define KEY_TIMER @"TIMER_AUTOSTART_ENABLED"
+#define KEY_POINTER @"TOUCH_POINTER_ENABLED"
+
@interface slideShowPreviewTable_vc : UITableViewController <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *optionsTable;
diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc.m b/ios/iosremote/iosremote/slideShowPreviewTable_vc.m
index 0904ea956c92..5086ef3b239a 100644
--- a/ios/iosremote/iosremote/slideShowPreviewTable_vc.m
+++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc.m
@@ -46,7 +46,7 @@
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
- self.optionsArray = [NSArray arrayWithObjects:@"Timer auto-start", nil];
+ self.optionsArray = [NSArray arrayWithObjects:OPTION_TIMER, OPTION_POINTER, nil];
self.comManager = [CommunicationManager sharedComManager];
self.comManager.delegate = self;
self.slidesRunning = NO;
@@ -106,7 +106,11 @@
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UISwitch *toggleSwitch = [[UISwitch alloc] init];
cell.accessoryView = [[UIView alloc] initWithFrame:toggleSwitch.frame];
- [toggleSwitch setOn:YES];
+ if (indexPath.row == 0) {
+ [toggleSwitch setOn:[[NSUserDefaults standardUserDefaults] boolForKey:KEY_TIMER]];
+ } else {
+ [toggleSwitch setOn:[[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER]];
+ }
[cell.accessoryView addSubview:toggleSwitch];
}
cell.textLabel.text = [self.optionsArray objectAtIndex:indexPath.row];
@@ -154,6 +158,14 @@
*/
-(IBAction)startPresentationAction:(id)sender {
+ for (UITableViewCell *cell in self.tableView.visibleCells) {
+ UISwitch * toggle = [[[cell accessoryView] subviews] objectAtIndex:0];
+
+ if ([cell.textLabel.text isEqualToString:OPTION_TIMER])
+ [[NSUserDefaults standardUserDefaults] setBool:[toggle isOn] forKey:KEY_TIMER];
+ else if ([cell.textLabel.text isEqualToString:OPTION_POINTER])
+ [[NSUserDefaults standardUserDefaults] setBool:[toggle isOn] forKey:KEY_POINTER];
+ }
[[self.comManager transmitter] startPresentation];
}
diff --git a/ios/iosremote/iosremote/slideShowSwipeInList.m b/ios/iosremote/iosremote/slideShowSwipeInList.m
index 353fc0721cf4..26288002bff7 100644
--- a/ios/iosremote/iosremote/slideShowSwipeInList.m
+++ b/ios/iosremote/iosremote/slideShowSwipeInList.m
@@ -12,6 +12,7 @@
#import "SlideShow.h"
#import "CommandTransmitter.h"
#import "SWRevealViewController.h"
+#import "slideShowPreviewTable_vc.h"
#import <QuartzCore/CALayer.h>
#define TIMER_STATE_RUNNING 0
@@ -42,6 +43,11 @@ dispatch_queue_t backgroundQueue;
self.slideshow = self.comManager.interpreter.slideShow;
self.slideshow.secondaryDelegate = self;
self.state = TIMER_STATE_CLEARED;
+
+ if ([[NSUserDefaults standardUserDefaults] boolForKey:KEY_TIMER]) {
+ UIButton *l = (UIButton *)[[self.slidesTable cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]] viewWithTag:2];
+ [self stopWatchStart:l];
+ }
}
- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender
diff --git a/ios/iosremote/iosremote/slideShow_vc.h b/ios/iosremote/iosremote/slideShow_vc.h
index b60c59046777..cea46a565a9f 100644
--- a/ios/iosremote/iosremote/slideShow_vc.h
+++ b/ios/iosremote/iosremote/slideShow_vc.h
@@ -13,6 +13,7 @@
- (IBAction)nextSlideAction:(id)sender;
- (IBAction)previousSlideAction:(id)sender;
- (IBAction)pointerAction:(id)sender;
+- (IBAction)accPointerAction:(id)sender;
@property (weak, nonatomic) IBOutlet UIView *notesView;
@property (weak, nonatomic) IBOutlet UIWebView *lecturer_notes;
@@ -20,4 +21,11 @@
@property (weak, nonatomic) IBOutlet UIImageView *secondarySlideView;
@property (weak, nonatomic) IBOutlet UILabel *slideNumber;
+@property (weak, nonatomic) IBOutlet UIView *movingPointer;
+@property (weak, nonatomic) IBOutlet UIImageView *touchPointerImage;
+@property (weak, nonatomic) IBOutlet UIView *blockingView;
+@property (weak, nonatomic) IBOutlet UIView *bottomView;
+@property (weak, nonatomic) IBOutlet UIScrollView *touchPointerScrollView;
+@property (weak, nonatomic) IBOutlet UIButton *pointerBtn;
+
@end
diff --git a/ios/iosremote/iosremote/slideShow_vc.m b/ios/iosremote/iosremote/slideShow_vc.m
index 840fe86b660e..71d83d80c405 100644
--- a/ios/iosremote/iosremote/slideShow_vc.m
+++ b/ios/iosremote/iosremote/slideShow_vc.m
@@ -7,16 +7,20 @@
*/
#import "slideShow_vc.h"
#import "SlideShow.h"
+#import "setRecursiveUserInteraction.h"
#import "CommunicationManager.h"
#import "SWRevealViewController.h"
#import "CommandInterpreter.h"
#import "CommandTransmitter.h"
+#import "slideShowPreviewTable_vc.h"
#import <QuartzCore/QuartzCore.h>
+#import <CoreMotion/CoreMotion.h>
#define CURRENT_SLIDE_IMAGEVIEW 1
#define NEXT_SLIDE_IMAGEVIEW 2
-#define CURRENT_SLIDE_NOTES 3
+#define TOUCH_POINTER_VIEW 3
+#define CURRENT_SLIDE_NOTES 4
@interface slideShow_vc ()
@@ -25,9 +29,16 @@
@property (nonatomic, strong) id slideShowFinishedObserver;
@property (nonatomic, strong) SlideShow* slideshow;
+@property BOOL pointerCalibrationOn;
+@property CGPoint refLeftUpperGravity;
+@property CGPoint refRightUpperGravity;
+@property CGPoint refRightLowerGravity;
+
// SWReveal Controller
@property (readwrite) IBOutlet UIBarButtonItem* revealButtonItem;
+@property int count;
+
@end
@implementation slideShow_vc
@@ -37,6 +48,162 @@
@synthesize slideShowFinishedObserver = _slideShowFinishedObserver;
@synthesize slideshow = _slideshow;
+#pragma mark - Pointer
+
+- (CMMotionManager *)motionManager
+{
+ CMMotionManager *motionManager = nil;
+
+ id appDelegate = [UIApplication sharedApplication].delegate;
+
+ if ([appDelegate respondsToSelector:@selector(motionManager)]) {
+ motionManager = [appDelegate motionManager];
+ }
+
+ return motionManager;
+}
+
+- (void)startMotionDetect
+{
+// __block float stepMoveFactorX = 5;
+// __block float stepMoveFactorY = 5;
+// __block double refX, refY;
+
+ [self.motionManager
+ startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init]
+ withHandler:^(CMAccelerometerData *data, NSError *error)
+ {
+
+ dispatch_async(dispatch_get_main_queue(),
+ ^{
+ CGRect rect = self.movingPointer.frame;
+ NSLog(@"x:%f y:%f z:%f", data.acceleration.x, data.acceleration.y, data.acceleration.z);
+ // Used to calibrate pointer based on initial position
+ // if (self.pointerCalibrationOn){
+ // refX = data.acceleration.x;
+ // refY = data.acceleration.y;
+ // self.pointerCalibrationOn = NO;
+ // }
+// float movetoX = rect.origin.x + ((data.acceleration.x - refX) * stepMoveFactorX);
+
+ float movetoX = self.touchPointerImage.frame.origin.x + self.touchPointerImage.frame.size.width * ABS(data.acceleration.x - self.refLeftUpperGravity.x) / ABS(self.refRightUpperGravity.x - self.refLeftUpperGravity.x);
+ float maxX = self.touchPointerImage.frame.origin.x + self.touchPointerImage.frame.size.width - rect.size.width;
+
+// float movetoY = (rect.origin.y) + ((data.acceleration.y - refY) * stepMoveFactorY);
+ float movetoY = self.touchPointerImage.frame.origin.y + self.touchPointerImage.frame.size.height * ABS(data.acceleration.y - self.refRightUpperGravity.y) / ABS(self.refRightLowerGravity.y - self.refRightUpperGravity.y);
+ float maxY = self.touchPointerImage.frame.origin.y + self.touchPointerImage.frame.size.height;
+
+ if ( movetoX > self.touchPointerImage.frame.origin.x && movetoX < maxX ) {
+ rect.origin.x = movetoX;
+ };
+
+ if ( movetoY > self.touchPointerImage.frame.origin.y && movetoY < maxY ) {
+ rect.origin.y = movetoY;
+ };
+
+ [UIView animateWithDuration:0 delay:0
+ options:UIViewAnimationOptionCurveEaseIn
+ animations:^{
+ self.movingPointer.frame = rect;
+ }
+ completion:nil
+ ];
+ });
+ }];
+}
+
+- (IBAction)accPointerAction:(id)sender{
+ BOOL acc = [[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER];
+ if (!acc) {
+ static BOOL pointer = NO;
+ if (!pointer){
+ [self startMotionDetect];
+ [self.movingPointer setHidden:NO];
+ }
+ else {
+ [self.motionManager stopAccelerometerUpdates];
+ self.pointerCalibrationOn = NO;
+ [self.movingPointer setHidden:YES];
+ }
+ pointer = !pointer;
+ }
+}
+
+- (IBAction)pointerAction:(id)sender {
+ if (self.count == 0 || self.count == 1){
+ CGPoint p;
+ p.x = [self.motionManager accelerometerData].acceleration.x;
+ p.y = [self.motionManager accelerometerData].acceleration.y;
+ self.refLeftUpperGravity = p;
+ if (self.count == 1) {
+ UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration"
+ message:@"Upper left corner calibrated, now point your device to the upper right corner of the screen and click Pointer button again"
+ delegate:nil
+ cancelButtonTitle:@"OK"
+ otherButtonTitles:@"Help", nil];
+ [message show];
+ }
+ ++self.count;
+ } else if (self.count == 2 || self.count == 3) {
+ CGPoint p;
+ p.x = [self.motionManager accelerometerData].acceleration.x;
+ p.y = [self.motionManager accelerometerData].acceleration.y;
+ self.refRightUpperGravity = p;
+ if (self.count == 3) {
+ UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration"
+ message:@"Upper right corner calibrated, now point your device to the lower right corner of the screen and click Pointer button again!"
+ delegate:nil
+ cancelButtonTitle:@"OK"
+ otherButtonTitles:@"Help", nil];
+ [message show];
+ }
+ ++self.count;
+ } else if (self.count == 4 || self.count == 5) {
+ CGPoint p;
+ p.x = [self.motionManager accelerometerData].acceleration.x;
+ p.y = [self.motionManager accelerometerData].acceleration.y;
+ self.refRightLowerGravity = p;
+ if (self.count == 5) {
+ UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration"
+ message:@"Lower right corner calibrated, enjoy your pointer!"
+ delegate:nil
+ cancelButtonTitle:@"OK"
+ otherButtonTitles:@"Help", nil];
+ [message show];
+ }
+ ++self.count;
+ } else {
+ if ([self.touchPointerImage isHidden]){
+ [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage];
+ CGPoint p = self.view.center;
+ p.y -= 50;
+ self.touchPointerImage.center = p;
+ }
+ [self.touchPointerImage fadeInfadeOutwithDuration:0.0 maxAlpha:1.0];
+ [self.blockingView fadeInfadeOutwithDuration:0.0 maxAlpha:0.7];
+ [self.touchPointerScrollView setHidden:![self.touchPointerScrollView isHidden]];
+ }
+}
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
+ UITouch *touch = [[event allTouches] anyObject];
+ CGPoint loc = [touch locationInView:self.slideView];
+ if (loc.x >= 0 && loc.x <= self.slideView.frame.origin.x+self.slideView.frame.size.width
+ && loc.y >= 0 && loc.y <= self.slideView.frame.origin.y + self.slideView.frame.size.height)
+ NSLog(@"Touch begins at: %f, %f", loc.x, loc.y);
+}
+
+- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
+{
+ UITouch *touch = [[event allTouches] anyObject];
+ CGPoint loc = [touch locationInView:self.slideView];
+ if (loc.x >= 0 && loc.x <= self.slideView.frame.origin.x+self.slideView.frame.size.width
+ && loc.y >= 0 && loc.y <= self.slideView.frame.origin.y + self.slideView.frame.size.height)
+ NSLog(@"Touch at: %f, %f", loc.x, loc.y);
+}
+
+#pragma mark - System defaults
+
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
@@ -49,40 +216,51 @@
- (void)viewDidLoad
{
[super viewDidLoad];
-
+
// Unique tag assignment. Don't use 0 as it's default. 0-10 for central VC
[self.slideView setTag:CURRENT_SLIDE_IMAGEVIEW];
[self.secondarySlideView setTag:NEXT_SLIDE_IMAGEVIEW];
[self.lecturer_notes setTag:CURRENT_SLIDE_NOTES];
-
+ [self.touchPointerImage setTag:TOUCH_POINTER_VIEW];
+
self.comManager = [CommunicationManager sharedComManager];
self.slideshow = [self.comManager.interpreter slideShow];
self.slideshow.delegate = self;
-
+
[self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView];
[self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView];
[self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes];
+ [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage];
[self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]];
-
-
+
+
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop Presentation"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(handleBack:)];
[backButton setTintColor:[UIColor redColor]];
self.revealViewController.navigationItem.leftBarButtonItem = backButton;
-
+
self.revealButtonItem = [[UIBarButtonItem alloc] initWithImage: [UIImage imageNamed:@"more_icon.png"]
style:UIBarButtonItemStyleBordered
target:self.revealViewController
action:@selector( revealToggle: )];
self.revealViewController.navigationItem.rightBarButtonItem = self.revealButtonItem;
[self.navigationController.navigationBar addGestureRecognizer: self.revealViewController.panGestureRecognizer];
+
+ self.pointerCalibrationOn = NO;
+ self.movingPointer.layer.cornerRadius = 3;
+
+ BOOL acc = [[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER];
+ if (!acc) {
+ [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpOutside];
+ [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpInside];
+ }
}
- (void) handleBack:(id)sender
{
- [self.comManager.transmitter stopPresentation];
+ [self.comManager.transmitter stopPresentation];
[self.navigationController popViewControllerAnimated:YES];
}
@@ -91,18 +269,19 @@
{
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
-
+
self.slideShowImageNoteReadyObserver =[center addObserverForName:MSG_SLIDE_CHANGED
object:nil
queue:mainQueue
usingBlock:^(NSNotification *note) {
[self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView];
+ [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage];
[self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView];
[self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes];
[self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]];
-
+
}];
-
+
self.slideShowFinishedObserver = [center addObserverForName:STATUS_CONNECTED_NOSLIDESHOW
object:nil
queue:mainQueue
@@ -115,19 +294,23 @@
self.slideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f);
self.slideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.slideView.bounds].CGPath;
self.slideView.clipsToBounds = NO;
-
+
self.secondarySlideView.layer.shadowColor = [[UIColor blackColor] CGColor];
self.secondarySlideView.layer.shadowOpacity = 0.5;
self.secondarySlideView.layer.shadowRadius = 4.0;
self.secondarySlideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f);
self.secondarySlideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.secondarySlideView.bounds].CGPath;
self.secondarySlideView.clipsToBounds = NO;
-
+
+ // We calibrate once when presentation starts. needs a users alert to inform users to point at the center of the screen at the beginning
+ self.pointerCalibrationOn = YES;
+
[super viewDidAppear:animated];
}
- (void) viewDidDisappear:(BOOL)animated
{
+ self.count = 0;
[[NSNotificationCenter defaultCenter] removeObserver:self.slideShowFinishedObserver];
[[NSNotificationCenter defaultCenter] removeObserver:self.slideShowImageNoteReadyObserver];
[super viewDidDisappear:animated];
@@ -147,6 +330,11 @@
[self setSlideNumber:nil];
[self setSecondarySlideView:nil];
[self setNotesView:nil];
+ [self setMovingPointer:nil];
+ [self setBlockingView:nil];
+ [self setBottomView:nil];
+ [self setTouchPointerScrollView:nil];
+ [self setPointerBtn:nil];
[super viewDidUnload];
}
@@ -158,10 +346,4 @@
[[self.comManager transmitter] previousTransition];
}
-- (IBAction)pointerAction:(id)sender {
- static int i = 0;
- NSLog(@"i = %u", i);
- [self.slideshow getContentAtIndex:i forView:self.slideView];
- i++;
-}
@end
diff --git a/ios/iosremote/iosremote/touchPointer_vc.h b/ios/iosremote/iosremote/touchPointer_vc.h
new file mode 100644
index 000000000000..4456df4b311f
--- /dev/null
+++ b/ios/iosremote/iosremote/touchPointer_vc.h
@@ -0,0 +1,17 @@
+//
+// touchPointer_vc.h
+// iosremote
+//
+// Created by Liu Siqi on 7/10/13.
+// Copyright (c) 2013 libreoffice. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface touchPointer_vc : UIViewController
+
+- (IBAction)dismissModal:(id)sender;
+
+@property (weak, nonatomic) IBOutlet UIImageView *imageView;
+
+@end
diff --git a/ios/iosremote/iosremote/touchPointer_vc.m b/ios/iosremote/iosremote/touchPointer_vc.m
new file mode 100644
index 000000000000..fafbd27a0772
--- /dev/null
+++ b/ios/iosremote/iosremote/touchPointer_vc.m
@@ -0,0 +1,61 @@
+//
+// touchPointer_vc.m
+// iosremote
+//
+// Created by Liu Siqi on 7/10/13.
+// Copyright (c) 2013 libreoffice. All rights reserved.
+//
+
+#import "touchPointer_vc.h"
+#import "CommunicationManager.h"
+#import "CommandTransmitter.h"
+#import "CommandInterpreter.h"
+#import "SlideShow.h"
+#import <QuartzCore/QuartzCore.h>
+
+@interface touchPointer_vc ()
+
+@property (nonatomic, strong) CommunicationManager *comManager;
+@end
+@implementation touchPointer_vc
+
+@synthesize comManager = _comManager;
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+ if (self) {
+ // Custom initialization
+ }
+ return self;
+}
+
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+ // Do any additional setup after loading the view.
+ self.comManager = [CommunicationManager sharedComManager];
+ [self.comManager.interpreter.slideShow getContentAtIndex:self.comManager.interpreter.slideShow.currentSlide forView:self.imageView];
+
+ self.imageView.layer.shadowColor = [[UIColor blackColor] CGColor];
+ self.imageView.layer.shadowOpacity = 0.5;
+ self.imageView.layer.shadowRadius = 4.0;
+ self.imageView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f);
+ self.imageView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.imageView.bounds].CGPath;
+ self.imageView.clipsToBounds = NO;
+}
+
+- (void)didReceiveMemoryWarning
+{
+ [super didReceiveMemoryWarning];
+ // Dispose of any resources that can be recreated.
+}
+
+- (IBAction)dismissModal:(id)sender {
+ [self dismissViewControllerAnimated:YES completion:nil];
+}
+- (void)viewDidUnload {
+ [self setImageView:nil];
+ [super viewDidUnload];
+}
+@end