cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From agri...@apache.org
Subject [3/3] git commit: ios: Use a persistent callbackId instead of calling sendJs
Date Tue, 15 Jul 2014 02:56:58 GMT
ios: Use a persistent callbackId instead of calling sendJs


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar/commit/be8a3e59
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar/tree/be8a3e59
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar/diff/be8a3e59

Branch: refs/heads/master
Commit: be8a3e5947e5ad47e602cd0064e0ce9442177729
Parents: f0031ca
Author: Andrew Grieve <agrieve@chromium.org>
Authored: Mon Jul 14 22:55:04 2014 -0400
Committer: Andrew Grieve <agrieve@chromium.org>
Committed: Mon Jul 14 22:56:42 2014 -0400

----------------------------------------------------------------------
 src/ios/CDVStatusBar.h |  4 +---
 src/ios/CDVStatusBar.m | 39 +++++++++++++++++++++++++++++++--------
 www/statusbar.js       |  8 +++++++-
 3 files changed, 39 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar/blob/be8a3e59/src/ios/CDVStatusBar.h
----------------------------------------------------------------------
diff --git a/src/ios/CDVStatusBar.h b/src/ios/CDVStatusBar.h
index df48d2d..84f37fa 100644
--- a/src/ios/CDVStatusBar.h
+++ b/src/ios/CDVStatusBar.h
@@ -23,12 +23,10 @@
 @interface CDVStatusBar : CDVPlugin {
     @protected
     BOOL _statusBarOverlaysWebView;
-    @protected
     UIView* _statusBarBackgroundView;
-    @protected
     BOOL _uiviewControllerBasedStatusBarAppearance;
-    @protected
     UIColor* _statusBarBackgroundColor;
+    NSString* _eventsCallbackId;
 }
 
 @property (atomic, assign) BOOL statusBarOverlaysWebView;

http://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar/blob/be8a3e59/src/ios/CDVStatusBar.m
----------------------------------------------------------------------
diff --git a/src/ios/CDVStatusBar.m b/src/ios/CDVStatusBar.m
index 98f2285..8b6666e 100644
--- a/src/ios/CDVStatusBar.m
+++ b/src/ios/CDVStatusBar.m
@@ -70,8 +70,9 @@ static const void *kStatusBarStyle = &kStatusBarStyle;
 @end
 
 
-@interface CDVStatusBar () <
-    UIScrollViewDelegate>
+@interface CDVStatusBar () <UIScrollViewDelegate>
+- (void)fireTappedEvent;
+- (void)updateIsVisible:(BOOL)visible;
 @end
 
 @implementation CDVStatusBar
@@ -85,9 +86,7 @@ static const void *kStatusBarStyle = &kStatusBarStyle;
 {
     if ([keyPath isEqual:@"statusBarHidden"]) {
         NSNumber* newValue = [change objectForKey:NSKeyValueChangeNewKey];
-        BOOL boolValue = [newValue boolValue];
-
-        [self.commandDelegate evalJs:[NSString stringWithFormat:@"StatusBar.isVisible = %@;",
boolValue? @"false" : @"true" ]];
+        [self updateIsVisible:![newValue boolValue]];
     }
 }
 
@@ -136,10 +135,34 @@ static const void *kStatusBarStyle = &kStatusBarStyle;
     fakeScrollView.contentOffset = CGPointMake(0.0f, UIScreen.mainScreen.bounds.size.height);
// Scroll down so a tap will take scroll view back to the top
 }
 
+- (void)onReset {
+    _eventsCallbackId = nil;
+}
+
+- (void)fireTappedEvent {
+    if (_eventsCallbackId == nil) {
+        return;
+    }
+    NSDictionary* payload = @{@"type": @"tap"};
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:payload];
+    [result setKeepCallbackAsBool:YES];
+    [self.commandDelegate sendPluginResult:result callbackId:_eventsCallbackId];
+}
+
+- (void)updateIsVisible:(BOOL)visible {
+    if (_eventsCallbackId == nil) {
+        return;
+    }
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:visible];
+    [result setKeepCallbackAsBool:YES];
+    [self.commandDelegate sendPluginResult:result callbackId:_eventsCallbackId];
+}
+
+
 - (void) _ready:(CDVInvokedUrlCommand*)command
 {
-    // set the initial value
-    [self.commandDelegate evalJs:[NSString stringWithFormat:@"StatusBar.isVisible = %@;",
[UIApplication sharedApplication].statusBarHidden? @"false" : @"true" ]];
+    _eventsCallbackId = command.callbackId;
+    [self updateIsVisible:![UIApplication sharedApplication].statusBarHidden];
 }
 
 - (void) initializeStatusBarBackgroundView
@@ -429,7 +452,7 @@ static const void *kStatusBarStyle = &kStatusBarStyle;
 
 - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
 {
-    [self.webView stringByEvaluatingJavaScriptFromString:@"var evt = document.createEvent(\"Event\");
evt.initEvent(\"statusTap\",true,true); window.dispatchEvent(evt);"];
+    [self fireTappedEvent];
     return NO;
 }
 

http://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar/blob/be8a3e59/www/statusbar.js
----------------------------------------------------------------------
diff --git a/www/statusbar.js b/www/statusbar.js
index 53e89fd..63967a9 100644
--- a/www/statusbar.js
+++ b/www/statusbar.js
@@ -97,7 +97,13 @@ var StatusBar = {
 
 // prime it
 exec(function (res) {
-    StatusBar.isVisible = res;
+    if (typeof res == 'object') {
+        if (res.type == 'tap') {
+            cordova.fireWindowEvent('statusTap');
+        }
+    } else {
+        StatusBar.isVisible = res;
+    }
 }, null, "StatusBar", "_ready", []);
 
 module.exports = StatusBar;


Mime
View raw message