rhodes 2.2.0 → 2.2.1.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. data/CHANGELOG +3 -0
  2. data/lib/build/jake.rb +1 -1
  3. data/lib/extensions/barcode/ext/barcode/shared/zbar/zbar/zbar/error.h +14 -0
  4. data/lib/framework/rhodes.rb +2 -2
  5. data/lib/framework/version.rb +2 -2
  6. data/lib/rhodes.rb +2 -2
  7. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  8. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +10 -2
  9. data/platform/android/Rhodes/jni/src/rhodes.cpp +9 -2
  10. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +18 -4
  11. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushService.java +1 -1
  12. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +54 -3
  13. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +14 -2
  14. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +12 -3
  15. data/platform/bb/RubyVM/src/com/rho/RhodesApp.java +2 -1
  16. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +4 -0
  17. data/platform/iphone/Classes/AppManager/AppManager.m +8 -0
  18. data/platform/iphone/Classes/RhoMainView.h +2 -0
  19. data/platform/iphone/Classes/RhoNativeViewManager.mm +4 -2
  20. data/platform/iphone/Classes/SimpleMainView.h +2 -0
  21. data/platform/iphone/Classes/SimpleMainView.m +4 -0
  22. data/platform/iphone/Classes/TabbedMainView.h +2 -0
  23. data/platform/iphone/Classes/TabbedMainView.m +8 -0
  24. data/platform/iphone/Info.plist +1 -1
  25. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +27 -140
  26. data/platform/shared/common/RhodesApp.h +1 -1
  27. data/platform/shared/common/RhodesAppBase.cpp +2 -1
  28. data/platform/shared/rubyext/System.cpp +6 -0
  29. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +12 -0
  30. data/rhodes.gemspec +1 -1
  31. data/spec/phone_spec/app/spec_runner.rb +1 -1
  32. metadata +7 -5
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ ## 2.2.1
2
+ * #5681741 - Android push: support alert,sync,sound,vibrate commands
3
+
1
4
  ## 2.2.0
2
5
  * Bluetooth for all platforms
3
6
  * Calendar support for all platforms
data/lib/build/jake.rb CHANGED
@@ -244,7 +244,7 @@ class Jake
244
244
  Process.kill( 9, f.pid )
245
245
  end
246
246
  else
247
- puts line
247
+ puts "RET: " + line
248
248
  $stdout.flush
249
249
  end
250
250
  end
@@ -104,6 +104,7 @@ extern int _zbar_verbosity;
104
104
 
105
105
  #else
106
106
 
107
+ /*
107
108
  # ifdef __GNUC__
108
109
  # define zprintf(level, format, args...) do { \
109
110
  fprintf(stderr, "%s: " format, __func__ , ##args); \
@@ -115,6 +116,19 @@ extern int _zbar_verbosity;
115
116
  ZFLUSH \
116
117
  } while(0)
117
118
  # endif
119
+ */
120
+
121
+ // Disable console output
122
+ # ifdef __GNUC__
123
+ # define zprintf(level, format, args...) do { \
124
+ } while(0)
125
+ # else
126
+ # define zprintf(level, format, ...) do { \
127
+ } while(0)
128
+ # endif
129
+
130
+
131
+
118
132
 
119
133
  #endif
120
134
 
@@ -1,9 +1,9 @@
1
1
  module Rhodes
2
2
  unless defined? Rhodes::VERSION
3
- VERSION = '2.2.0'
3
+ VERSION = '2.2.1'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
- DBVERSION = '2.2.0'
6
+ DBVERSION = '2.2.1'
7
7
  end
8
8
 
9
9
  end
@@ -1,8 +1,8 @@
1
1
  module RhodesFramework
2
2
  unless defined? RhodesFramework::VERSION
3
- VERSION = '2.2.0'
3
+ VERSION = '2.2.1'
4
4
  end
5
5
  unless defined? RhodesFramework::DBVERSION
6
- DBVERSION = '2.2.0'
6
+ DBVERSION = '2.2.1'
7
7
  end
8
8
  end
data/lib/rhodes.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  module Rhodes
2
2
  unless defined? Rhodes::VERSION
3
- VERSION = '2.2.0'
3
+ VERSION = '2.2.1'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
- DBVERSION = '2.2.0'
6
+ DBVERSION = '2.2.1'
7
7
  end
8
8
 
9
9
  end
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
2
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
3
  package="com.rhomobile.rhodes"
4
- android:versionCode="22"
5
- android:versionName="2.2.0">
4
+ android:versionCode="23"
5
+ android:versionName="2.2.1">
6
6
  <uses-sdk android:minSdkVersion="3" />
7
7
  <application android:icon="@drawable/icon"
8
8
  android:multiprocess="true"
@@ -45,6 +45,14 @@ JNIEXPORT void JNICALL Java_com_rhomobile_rhodes_RhodesService_startRhodesApp
45
45
  JNIEXPORT void JNICALL Java_com_rhomobile_rhodes_RhodesService_doSyncAllSources
46
46
  (JNIEnv *, jobject, jboolean);
47
47
 
48
+ /*
49
+ * Class: com_rhomobile_rhodes_RhodesService
50
+ * Method: doSyncSource
51
+ * Signature: (Ljava/lang/String;)V
52
+ */
53
+ JNIEXPORT void JNICALL Java_com_rhomobile_rhodes_RhodesService_doSyncSource
54
+ (JNIEnv *, jobject, jstring);
55
+
48
56
  /*
49
57
  * Class: com_rhomobile_rhodes_RhodesService
50
58
  * Method: getOptionsUrl
@@ -160,9 +168,9 @@ JNIEXPORT void JNICALL Java_com_rhomobile_rhodes_RhodesService_setPushRegistrati
160
168
  /*
161
169
  * Class: com_rhomobile_rhodes_RhodesService
162
170
  * Method: callPushCallback
163
- * Signature: (Ljava/lang/String;)V
171
+ * Signature: (Ljava/lang/String;)Z
164
172
  */
165
- JNIEXPORT void JNICALL Java_com_rhomobile_rhodes_RhodesService_callPushCallback
173
+ JNIEXPORT jboolean JNICALL Java_com_rhomobile_rhodes_RhodesService_callPushCallback
166
174
  (JNIEnv *, jobject, jstring);
167
175
 
168
176
  #ifdef __cplusplus
@@ -420,6 +420,13 @@ RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_RhodesService_doSyncAllSources
420
420
  rho_sync_doSyncAllSources(show_status_popup);
421
421
  }
422
422
 
423
+ RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_RhodesService_doSyncSource
424
+ (JNIEnv *env, jobject, jstring sourceObj)
425
+ {
426
+ std::string source = rho_cast<std::string>(env, sourceObj);
427
+ rho_sync_doSyncSourceByName(source.c_str());
428
+ }
429
+
423
430
  RHO_GLOBAL jstring JNICALL Java_com_rhomobile_rhodes_RhodesService_getOptionsUrl
424
431
  (JNIEnv *env, jobject)
425
432
  {
@@ -502,11 +509,11 @@ RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_RhodesService_setPushRegistrat
502
509
  rho::sync::CClientRegister::Create(new rho::common::CRhoClassFactory, id.c_str());
503
510
  }
504
511
 
505
- RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_RhodesService_callPushCallback
512
+ RHO_GLOBAL jboolean JNICALL Java_com_rhomobile_rhodes_RhodesService_callPushCallback
506
513
  (JNIEnv *env, jobject, jstring jData)
507
514
  {
508
515
  std::string data = rho_cast<std::string>(env, jData);
509
- rho_rhodesapp_callPushCallback(data.c_str());
516
+ return (jboolean)rho_rhodesapp_callPushCallback(data.c_str());
510
517
  }
511
518
 
512
519
  RHO_GLOBAL char *rho_timezone()
@@ -1,5 +1,6 @@
1
1
  package com.rhomobile.rhodes;
2
2
 
3
+ import android.app.Activity;
3
4
  import android.content.BroadcastReceiver;
4
5
  import android.content.Context;
5
6
  import android.content.Intent;
@@ -47,12 +48,25 @@ public class PushReceiver extends BroadcastReceiver {
47
48
  @Override
48
49
  public void onReceive(Context context, Intent intent) {
49
50
  String action = intent.getAction();
50
- if (action.equals(PushService.C2DM_INTENT_PREFIX + "REGISTRATION"))
51
- handleRegistration(context, intent);
52
- else if (action.equals(PushService.C2DM_INTENT_PREFIX + "RECEIVE"))
53
- handleMessage(context, intent);
51
+ if (action.equals(PushService.C2DM_INTENT_PREFIX + "REGISTRATION")) {
52
+ try {
53
+ handleRegistration(context, intent);
54
+ }
55
+ catch (Exception e) {
56
+ Log.e(TAG, "Can't handle PUSH registration: " + e.getMessage());
57
+ }
58
+ }
59
+ else if (action.equals(PushService.C2DM_INTENT_PREFIX + "RECEIVE")) {
60
+ try {
61
+ handleMessage(context, intent);
62
+ }
63
+ catch (Exception e) {
64
+ Log.e(TAG, "Can't handle PUSH message: " + e.getMessage());
65
+ }
66
+ }
54
67
  else
55
68
  Log.w(TAG, "Unknown action received (PUSH): " + action);
69
+ setResult(Activity.RESULT_OK, null /* data */, null /* extra */);
56
70
  }
57
71
 
58
72
  }
@@ -27,7 +27,7 @@ public class PushService {
27
27
 
28
28
  checkCapabilities();
29
29
 
30
- Logger.D(TAG, "Register for PUSH messages");
30
+ Logger.D(TAG, "Register for PUSH messages (use \"" + Push.SENDER + "\" as sender)");
31
31
 
32
32
  Context ctx = RhodesService.getInstance().getContext();
33
33
  Intent registrationIntent = new Intent(C2DM_INTENT_PREFIX + "REGISTER");
@@ -9,6 +9,7 @@ import java.util.Set;
9
9
  import java.util.TimeZone;
10
10
  import java.util.Vector;
11
11
 
12
+ import com.rhomobile.rhodes.alert.Alert;
12
13
  import com.rhomobile.rhodes.bluetooth.RhoBluetoothManager;
13
14
  import com.rhomobile.rhodes.file.RhoFileApi;
14
15
  import com.rhomobile.rhodes.geolocation.GeoLocation;
@@ -135,6 +136,7 @@ public class RhodesService {
135
136
  private native void startRhodesApp();
136
137
 
137
138
  public native void doSyncAllSources(boolean v);
139
+ public native void doSyncSource(String source);
138
140
 
139
141
  public native String getOptionsUrl();
140
142
  public native String getStartUrl();
@@ -686,6 +688,11 @@ public class RhodesService {
686
688
  else if (name.equalsIgnoreCase("device_name")) {
687
689
  return Build.DEVICE;
688
690
  }
691
+ else if (name.equalsIgnoreCase("is_emulator"))
692
+ {
693
+ String strDevice = Build.DEVICE;
694
+ return new Boolean(strDevice != null && strDevice.equalsIgnoreCase("generic"));
695
+ }
689
696
  else if (name.equalsIgnoreCase("os_version")) {
690
697
  return Build.VERSION.RELEASE;
691
698
  }
@@ -705,7 +712,7 @@ public class RhodesService {
705
712
 
706
713
  public native void setPushRegistrationId(String id);
707
714
 
708
- private native void callPushCallback(String data);
715
+ private native boolean callPushCallback(String data);
709
716
 
710
717
  public void handlePushMessage(Intent intent) {
711
718
  Logger.D(TAG, "Receive PUSH message");
@@ -719,6 +726,10 @@ public class RhodesService {
719
726
  StringBuilder builder = new StringBuilder();
720
727
 
721
728
  Set<String> keys = extras.keySet();
729
+ // Remove system related keys
730
+ keys.remove("collapse_key");
731
+ keys.remove("from");
732
+
722
733
  for (String key : keys) {
723
734
  Logger.D(TAG, "PUSH item: " + key);
724
735
  Object value = extras.get(key);
@@ -732,9 +743,49 @@ public class RhodesService {
732
743
 
733
744
  String data = builder.toString();
734
745
  Logger.D(TAG, "Received PUSH message: " + data);
735
- callPushCallback(data);
746
+ if (callPushCallback(data))
747
+ return;
736
748
 
737
- // TODO: handle alers/sounds/vibrate events
749
+ String alert = extras.getString("alert");
750
+ if (alert != null) {
751
+ Logger.D(TAG, "PUSH: Alert: " + alert);
752
+ Alert.showPopup(alert);
753
+ }
754
+ String sound = extras.getString("sound");
755
+ if (sound != null) {
756
+ Logger.D(TAG, "PUSH: Sound file name: " + sound);
757
+ Alert.playFile("/public/alerts/" + sound, null);
758
+ }
759
+ String vibrate = extras.getString("vibrate");
760
+ if (vibrate != null) {
761
+ Logger.D(TAG, "PUSH: Vibrate: " + vibrate);
762
+ int duration;
763
+ try {
764
+ duration = Integer.parseInt(vibrate);
765
+ }
766
+ catch (NumberFormatException e) {
767
+ duration = 5;
768
+ }
769
+ Logger.D(TAG, "Vibrate " + duration + " seconds");
770
+ Alert.vibrate(duration);
771
+ }
772
+
773
+ String syncSources = extras.getString("do_sync");
774
+ if (syncSources != null) {
775
+ Logger.D(TAG, "PUSH: Sync:");
776
+ boolean syncAll = false;
777
+ for (String source : syncSources.split(",")) {
778
+ Logger.D(TAG, "url = " + source);
779
+ if (source.equalsIgnoreCase("all"))
780
+ syncAll = true;
781
+ else {
782
+ doSyncSource(source.trim());
783
+ }
784
+ }
785
+
786
+ if (syncAll)
787
+ doSyncAllSources(true);
788
+ }
738
789
  }
739
790
 
740
791
  }
@@ -21,6 +21,7 @@
21
21
  package com.rhomobile.rhodes.alert;
22
22
 
23
23
  import java.io.File;
24
+ import java.io.FileInputStream;
24
25
  import java.util.Map;
25
26
  import java.util.Vector;
26
27
 
@@ -54,6 +55,7 @@ public class Alert {
54
55
  private static final String TAG = "Alert";
55
56
 
56
57
  private static Dialog currentAlert = null;
58
+ private static MediaPlayer currentMP = null;
57
59
 
58
60
  private static native void doCallback(String url, String id, String title);
59
61
 
@@ -283,14 +285,19 @@ public class Alert {
283
285
  vibrator.vibrate(duration);
284
286
  }
285
287
  catch (Exception e) {
286
- reportFail("showPopup", e);
288
+ reportFail("vibrate", e);
287
289
  }
288
290
  }
289
291
 
290
292
  public static void playFile(String fileName, String mediaType) {
291
293
  try {
292
294
  Logger.T(TAG, "playFile: " + fileName + " (" + mediaType + ")");
295
+
296
+ if (currentMP != null)
297
+ currentMP.release();
298
+
293
299
  MediaPlayer mp = new MediaPlayer();
300
+ currentMP = mp;
294
301
  mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
295
302
  public boolean onError(MediaPlayer mp, int what, int extra) {
296
303
  Logger.E(TAG, "Error when playing file : " + what + ", " + extra);
@@ -302,9 +309,14 @@ public class Alert {
302
309
  f = new File(f, fileName);
303
310
  if (!f.exists())
304
311
  RhoFileApi.copy(fileName);
312
+
305
313
  String source = f.getCanonicalPath();
306
314
  Logger.T(TAG, "Final file name: " + source);
307
- mp.setDataSource(source);
315
+ //mp.setDataSource(source);
316
+
317
+ FileInputStream fs = new FileInputStream(f);
318
+ mp.setDataSource(fs.getFD());
319
+
308
320
  mp.prepare();
309
321
  mp.start();
310
322
  } catch (Exception e) {
@@ -29,8 +29,9 @@ public class EventStore {
29
29
  private static final String EVENTS_PRIVACY = "visibility";
30
30
 
31
31
  private static void reportFail(String name, Exception e) {
32
- Logger.E(TAG, "Call of \"" + name + "\" failed: " + e.getMessage());
33
- e.printStackTrace();
32
+ Logger.E(TAG, "Call of \"" + name + "\" failed: " + e != null ? e.getMessage() : "null exception");
33
+ if ( e != null )
34
+ e.printStackTrace();
34
35
  }
35
36
 
36
37
  private static String dateToString(Date date) {
@@ -246,7 +247,15 @@ public class EventStore {
246
247
 
247
248
  Logger.D(TAG, "delete(id)");
248
249
 
249
- int rows = getContentResolver().delete(EVENTS_URI, "_id=?", new String[] {id});
250
+ ContentResolver r = getContentResolver();
251
+ int rows;
252
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
253
+ Uri uri = ContentUris.withAppendedId(EVENTS_URI, Long.parseLong(id));
254
+ rows = getContentResolver().delete(uri, null, null);
255
+ }
256
+ else {
257
+ rows = r.delete(EVENTS_URI, "_id=?", new String[] {id});
258
+ }
250
259
  Logger.D(TAG, String.format("%d rows deleted", rows));
251
260
 
252
261
  return null;
@@ -112,7 +112,8 @@ public class RhodesApp
112
112
  {
113
113
  return strUrl.startsWith("http://") || strUrl.startsWith("https://") ||
114
114
  strUrl.startsWith("javascript:") || strUrl.startsWith("mailto:")
115
- || strUrl.startsWith("tel:")|| strUrl.startsWith("wtai:");
115
+ || strUrl.startsWith("tel:")|| strUrl.startsWith("wtai:") ||
116
+ strUrl.startsWith("sms:");
116
117
  }
117
118
 
118
119
  public String canonicalizeRhoUrl(String url)
@@ -172,6 +172,10 @@ public class System {
172
172
  return ObjectFactory.createString(DeviceInfo.getDeviceName());
173
173
  if ( strPropName.equalsIgnoreCase("os_version") )
174
174
  return ObjectFactory.createString(DeviceInfo.getSoftwareVersion());
175
+ if ( strPropName.equalsIgnoreCase("rhodes_port") )
176
+ return ObjectFactory.createInteger(0);
177
+ if ( strPropName.equalsIgnoreCase("is_emulator") )
178
+ return ObjectFactory.createBoolean(DeviceInfo.isSimulator());
175
179
 
176
180
  return RubyConstant.QNIL;
177
181
  }
@@ -320,7 +320,15 @@ int rho_sysimpl_get_property(char* szPropName, VALUE* resValue)
320
320
  NSString *version = [[UIDevice currentDevice] systemVersion];
321
321
  *resValue = rho_ruby_create_string([version UTF8String]);
322
322
  return 1;
323
+ }else if (strcasecmp("is_emulator", szPropName) == 0) {
324
+ int bSim = 0;
325
+ #if TARGET_IPHONE_SIMULATOR
326
+ bSim = 1;
327
+ #endif
328
+ *resValue = rho_ruby_create_boolean(bSim);
329
+ return 1;
323
330
  }
331
+
324
332
  /*
325
333
  // Removed because it's possibly dangerous: Apple could reject application
326
334
  // used such approach from its AppStore
@@ -32,4 +32,6 @@
32
32
  - (void)addNavBar:(NSString*)title left:(NSArray*)left right:(NSArray*)right;
33
33
  - (void)removeNavBar;
34
34
 
35
+ - (UIWebView*)getWebView:(int)tab_index;
36
+
35
37
  @end
@@ -12,7 +12,7 @@
12
12
 
13
13
  #import "RhoNativeViewManagerOC.h"
14
14
  #import "RhoNativeViewManager.h"
15
-
15
+ #import "Rhodes.h"
16
16
 
17
17
 
18
18
 
@@ -196,7 +196,7 @@ static RhoNativeViewManagerOC *instance = NULL;
196
196
  }
197
197
 
198
198
  +(UIWebView*)getWebViewObject:(int)tab_index {
199
- return nil;
199
+ return [[[Rhodes sharedInstance] mainView] getWebView:tab_index];
200
200
  }
201
201
 
202
202
 
@@ -204,6 +204,7 @@ static RhoNativeViewManagerOC *instance = NULL;
204
204
 
205
205
 
206
206
 
207
+
207
208
  void RhoNativeViewManager::registerViewType(const char* viewType, NativeViewFactory* factory) {
208
209
  NativeViewFactoryOCImpl* f = [NativeViewFactoryOCImpl makeFactory:factory];
209
210
  NSString* s = [[NSString alloc] initWithUTF8String:viewType];
@@ -222,3 +223,4 @@ void RhoNativeViewManager::unregisterViewType(const char* viewType) {
222
223
  void* RhoNativeViewManager::getWebViewObject(int tab_index) {
223
224
  return [RhoNativeViewManagerOC getWebViewObject:tab_index];
224
225
  }
226
+
@@ -35,4 +35,6 @@
35
35
  - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
36
36
  - (void)loadView;
37
37
 
38
+ - (UIWebView*)getWebView:(int)tab_index;
39
+
38
40
  @end
@@ -660,6 +660,10 @@ int rho_sys_get_screen_height();
660
660
  return 0;
661
661
  }
662
662
 
663
+ - (UIWebView*)getWebView:(int)tab_index {
664
+ return webView;
665
+ }
666
+
663
667
 
664
668
  - (void)addNavBar:(UINavigationBar*)navb {
665
669
  [self removeNavBar];
@@ -22,4 +22,6 @@
22
22
 
23
23
  - (id)initWithMainView:(id<RhoMainView>)v parent:(UIWindow*)p tabs:(NSArray*)items;
24
24
 
25
+ - (UIWebView*)getWebView:(int)tab_index;
26
+
25
27
  @end
@@ -205,6 +205,14 @@
205
205
  return tabindex;
206
206
  }
207
207
 
208
+ - (UIWebView*)getWebView:(int)tab_index {
209
+ if (tab_index == -1) {
210
+ tab_index = [self activeTab];
211
+ }
212
+ return [[self subView:tab_index] getWebView:-1];
213
+ }
214
+
215
+
208
216
  - (void)addNavBar:(NSString*)title left:(NSArray*)left right:(NSArray*)right {
209
217
  [[self subView:[self activeTab]] addNavBar:title left:left right:right];
210
218
  }
@@ -27,7 +27,7 @@
27
27
  <key>CFBundleSignature</key>
28
28
  <string>????</string>
29
29
  <key>CFBundleVersion</key>
30
- <string>2.2.0</string>
30
+ <string>2.2.1</string>
31
31
  <key>LSRequiresIPhoneOS</key>
32
32
  <true/>
33
33
  </dict>
@@ -27,7 +27,6 @@
27
27
  BD38E6DC115CFF14001CE05C /* WebView.m in Sources */ = {isa = PBXBuildFile; fileRef = BD38E6DB115CFF14001CE05C /* WebView.m */; };
28
28
  BD38E755115D1AAC001CE05C /* TabbedMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = BD38E754115D1AAC001CE05C /* TabbedMainView.m */; };
29
29
  BD486F59124FB66600F8A93F /* Event.m in Sources */ = {isa = PBXBuildFile; fileRef = BD486F58124FB66600F8A93F /* Event.m */; };
30
- BD486FE212505FE000F8A93F /* EventKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD486FE112505FE000F8A93F /* EventKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
31
30
  BD5B744B113BE2DB00C6070A /* SplashViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BD5B7449113BE2DB00C6070A /* SplashViewController.m */; };
32
31
  BD6A622A123E46BB0093E03C /* RhoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BD6A6229123E46BB0093E03C /* RhoViewController.m */; };
33
32
  BD97AC211160EE8F006960F9 /* RhoAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = BD97AC201160EE8F006960F9 /* RhoAlert.m */; };
@@ -183,7 +182,6 @@
183
182
  BD38E754115D1AAC001CE05C /* TabbedMainView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TabbedMainView.m; sourceTree = "<group>"; };
184
183
  BD486F57124FB66600F8A93F /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = Event/Event.h; sourceTree = "<group>"; };
185
184
  BD486F58124FB66600F8A93F /* Event.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Event.m; path = Event/Event.m; sourceTree = "<group>"; };
186
- BD486FE112505FE000F8A93F /* EventKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKit.framework; path = System/Library/Frameworks/EventKit.framework; sourceTree = SDKROOT; };
187
185
  BD5B7448113BE2DB00C6070A /* SplashViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplashViewController.h; sourceTree = "<group>"; };
188
186
  BD5B7449113BE2DB00C6070A /* SplashViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SplashViewController.m; sourceTree = "<group>"; };
189
187
  BD6A6228123E46BB0093E03C /* RhoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RhoViewController.h; sourceTree = "<group>"; };
@@ -282,7 +280,6 @@
282
280
  46AD7DB31117AFB9009A974A /* MapKit.framework in Frameworks */,
283
281
  46AD7DB71117AFBF009A974A /* CFNetwork.framework in Frameworks */,
284
282
  FACC2100123A759A0088A447 /* GameKit.framework in Frameworks */,
285
- BD486FE212505FE000F8A93F /* EventKit.framework in Frameworks */,
286
283
  );
287
284
  runOnlyForDeploymentPostprocessing = 0;
288
285
  };
@@ -353,7 +350,6 @@
353
350
  46AD7DB21117AFB9009A974A /* MapKit.framework */,
354
351
  46AD7DB61117AFBF009A974A /* CFNetwork.framework */,
355
352
  FACC20FF123A759A0088A447 /* GameKit.framework */,
356
- BD486FE112505FE000F8A93F /* EventKit.framework */,
357
353
  );
358
354
  name = CustomTemplate;
359
355
  sourceTree = "<group>";
@@ -915,7 +911,6 @@
915
911
  CODE_SIGN_IDENTITY = "Don't Code Sign";
916
912
  "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Don't Code Sign";
917
913
  COPY_PHASE_STRIP = NO;
918
- EXTENSIONS_LDFLAGS = "-filelist $(TARGET_TEMP_DIR)/rhodeslibs.txt";
919
914
  GCC_DYNAMIC_NO_PIC = NO;
920
915
  GCC_OPTIMIZATION_LEVEL = 0;
921
916
  GCC_PRECOMPILE_PREFIX_HEADER = YES;
@@ -930,7 +925,6 @@
930
925
  );
931
926
  OTHER_CFLAGS = "";
932
927
  OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
933
- OTHER_LDFLAGS = "$(EXTENSIONS_LDFLAGS)";
934
928
  PRODUCT_NAME = rhorunner;
935
929
  PROVISIONING_PROFILE = "";
936
930
  "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
@@ -963,19 +957,6 @@
963
957
  ONLY_ACTIVE_ARCH = YES;
964
958
  OTHER_CFLAGS = "";
965
959
  OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
966
- OTHER_LDFLAGS = "$(EXTENSIONS_LDFLAGS)";
967
- "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
968
- "-framework",
969
- CFNetwork,
970
- "-framework",
971
- CoreGraphics,
972
- "$(EXTENSIONS_LDFLAGS)",
973
- );
974
- "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=*]" = (
975
- "-framework",
976
- CFNetwork,
977
- "$(EXTENSIONS_LDFLAGS)",
978
- );
979
960
  PRODUCT_NAME = rhorunner;
980
961
  PROVISIONING_PROFILE = "";
981
962
  "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
@@ -991,72 +972,23 @@
991
972
  ARCHS = "$(ARCHS_STANDARD_32_BIT)";
992
973
  CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
993
974
  "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Don't Code Sign";
975
+ EXTENSIONS_LDFLAGS = "-filelist $(TARGET_TEMP_DIR)/rhodeslibs.txt";
994
976
  GCC_C_LANGUAGE_STANDARD = c99;
995
977
  GCC_WARN_ABOUT_RETURN_TYPE = YES;
996
978
  GCC_WARN_UNUSED_VARIABLE = YES;
997
979
  HEADER_SEARCH_PATHS = ../shared;
998
980
  "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
999
- "-framework",
1000
- CFNetwork,
1001
- "-lrhorubylib",
1002
- "-lrhosynclib",
1003
- "-ltcmalloc",
1004
- "-lrholib",
1005
- "-lrhoextlib",
1006
- );
1007
- "OTHER_LDFLAGS[sdk=iphoneos3.0][arch=*]" = (
1008
- "-framework",
1009
- MapKit,
1010
- "-framework",
1011
- CFNetwork,
1012
- "-lrhorubylib",
1013
- "-lrhosynclib",
1014
- "-ltcmalloc",
1015
- "-lrholib",
1016
- "-lrhoextlib",
1017
- );
1018
- "OTHER_LDFLAGS[sdk=iphoneos3.1][arch=*]" = (
1019
- "-framework",
1020
- MapKit,
1021
- "-framework",
1022
- CFNetwork,
1023
- "-lrhorubylib",
1024
- "-lrhosynclib",
1025
- "-ltcmalloc",
1026
- "-lrholib",
1027
- "-lrhoextlib",
981
+ "$(EXTENSIONS_LDFLAGS)",
982
+ "-weak_framework",
983
+ EventKit,
1028
984
  );
985
+ "OTHER_LDFLAGS[sdk=iphoneos3.2][arch=*]" = "$(EXTENSIONS_LDFLAGS)";
1029
986
  "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=*]" = (
1030
- "-framework",
1031
- CFNetwork,
1032
- "-lrhorubylib",
1033
- "-lrhosynclib",
1034
- "-ltcmalloc",
1035
- "-lrholib",
1036
- "-lrhoextlib",
1037
- );
1038
- "OTHER_LDFLAGS[sdk=iphonesimulator3.0][arch=*]" = (
1039
- "-framework",
1040
- MapKit,
1041
- "-framework",
1042
- CFNetwork,
1043
- "-lrhorubylib",
1044
- "-lrhosynclib",
1045
- "-ltcmalloc",
1046
- "-lrholib",
1047
- "-lrhoextlib",
1048
- );
1049
- "OTHER_LDFLAGS[sdk=iphonesimulator3.1][arch=*]" = (
1050
- "-framework",
1051
- MapKit,
1052
- "-framework",
1053
- CFNetwork,
1054
- "-lrhorubylib",
1055
- "-lrhosynclib",
1056
- "-ltcmalloc",
1057
- "-lrholib",
1058
- "-lrhoextlib",
987
+ "$(EXTENSIONS_LDFLAGS)",
988
+ "-weak_framework",
989
+ EventKit,
1059
990
  );
991
+ "OTHER_LDFLAGS[sdk=iphonesimulator3.2][arch=*]" = "$(EXTENSIONS_LDFLAGS)";
1060
992
  PREBINDING = NO;
1061
993
  "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
1062
994
  SDKROOT = iphoneos3.2;
@@ -1086,45 +1018,6 @@
1086
1018
  ONLY_ACTIVE_ARCH = YES;
1087
1019
  OTHER_CFLAGS = "";
1088
1020
  OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
1089
- OTHER_LDFLAGS = "$(EXTENSIONS_LDFLAGS)";
1090
- "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
1091
- "-framework",
1092
- CFNetwork,
1093
- "$(EXTENSIONS_LDFLAGS)",
1094
- );
1095
- "OTHER_LDFLAGS[sdk=iphoneos3.0][arch=*]" = (
1096
- "-framework",
1097
- MapKit,
1098
- "-framework",
1099
- CFNetwork,
1100
- "$(EXTENSIONS_LDFLAGS)",
1101
- );
1102
- "OTHER_LDFLAGS[sdk=iphoneos3.1][arch=*]" = (
1103
- "-framework",
1104
- MapKit,
1105
- "-framework",
1106
- CFNetwork,
1107
- "$(EXTENSIONS_LDFLAGS)",
1108
- );
1109
- "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=*]" = (
1110
- "-framework",
1111
- CFNetwork,
1112
- "$(EXTENSIONS_LDFLAGS)",
1113
- );
1114
- "OTHER_LDFLAGS[sdk=iphonesimulator3.0][arch=*]" = (
1115
- "-framework",
1116
- MapKit,
1117
- "-framework",
1118
- CFNetwork,
1119
- "$(EXTENSIONS_LDFLAGS)",
1120
- );
1121
- "OTHER_LDFLAGS[sdk=iphonesimulator3.1][arch=*]" = (
1122
- "-framework",
1123
- MapKit,
1124
- "-framework",
1125
- CFNetwork,
1126
- "$(EXTENSIONS_LDFLAGS)",
1127
- );
1128
1021
  PRODUCT_NAME = rhorunner;
1129
1022
  SDKROOT = iphoneos4.0;
1130
1023
  TARGETED_DEVICE_FAMILY = "1,2";
@@ -1139,6 +1032,7 @@
1139
1032
  CODE_SIGN_ENTITLEMENTS = "";
1140
1033
  CODE_SIGN_IDENTITY = "Don't Code Sign";
1141
1034
  "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Don't Code Sign";
1035
+ EXTENSIONS_LDFLAGS = "-filelist $(TARGET_TEMP_DIR)/rhodeslibs.txt";
1142
1036
  GCC_C_LANGUAGE_STANDARD = c99;
1143
1037
  GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
1144
1038
  GCC_WARN_ABOUT_RETURN_TYPE = YES;
@@ -1147,19 +1041,17 @@
1147
1041
  IBC_FLATTEN_NIBS = YES;
1148
1042
  ONLY_ACTIVE_ARCH = YES;
1149
1043
  "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
1150
- "-lrhorubylib",
1151
- "-lrhosynclib",
1152
- "-ltcmalloc",
1153
- "-lrholib",
1154
- "-lrhoextlib",
1044
+ "$(EXTENSIONS_LDFLAGS)",
1045
+ "-weak_framework",
1046
+ EventKit,
1155
1047
  );
1048
+ "OTHER_LDFLAGS[sdk=iphoneos3.2][arch=*]" = "$(EXTENSIONS_LDFLAGS)";
1156
1049
  "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=*]" = (
1157
- "-lrhorubylib",
1158
- "-lrhosynclib",
1159
- "-ltcmalloc",
1160
- "-lrholib",
1161
- "-lrhoextlib",
1050
+ "$(EXTENSIONS_LDFLAGS)",
1051
+ "-weak_framework",
1052
+ EventKit,
1162
1053
  );
1054
+ "OTHER_LDFLAGS[sdk=iphonesimulator3.2][arch=*]" = "$(EXTENSIONS_LDFLAGS)";
1163
1055
  PREBINDING = NO;
1164
1056
  PROVISIONING_PROFILE = "";
1165
1057
  "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
@@ -1175,28 +1067,23 @@
1175
1067
  buildSettings = {
1176
1068
  ARCHS = "$(ARCHS_STANDARD_32_BIT)";
1177
1069
  "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Don't Code Sign";
1070
+ EXTENSIONS_LDFLAGS = "-filelist $(TARGET_TEMP_DIR)/rhodeslibs.txt";
1178
1071
  GCC_C_LANGUAGE_STANDARD = c99;
1179
1072
  GCC_WARN_ABOUT_RETURN_TYPE = YES;
1180
1073
  GCC_WARN_UNUSED_VARIABLE = YES;
1181
1074
  HEADER_SEARCH_PATHS = ../shared;
1182
1075
  "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = (
1183
- "-framework",
1184
- CFNetwork,
1185
- "-lrhorubylib",
1186
- "-lrhosynclib",
1187
- "-ltcmalloc",
1188
- "-lrholib",
1189
- "-lrhoextlib",
1076
+ "$(EXTENSIONS_LDFLAGS)",
1077
+ "-weak_framework",
1078
+ EventKit,
1190
1079
  );
1080
+ "OTHER_LDFLAGS[sdk=iphoneos3.2][arch=*]" = "$(EXTENSIONS_LDFLAGS)";
1191
1081
  "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=*]" = (
1192
- "-framework",
1193
- CFNetwork,
1194
- "-lrhorubylib",
1195
- "-lrhosynclib",
1196
- "-ltcmalloc",
1197
- "-lrholib",
1198
- "-lrhoextlib",
1082
+ "$(EXTENSIONS_LDFLAGS)",
1083
+ "-weak_framework",
1084
+ EventKit,
1199
1085
  );
1086
+ "OTHER_LDFLAGS[sdk=iphonesimulator3.2][arch=*]" = "$(EXTENSIONS_LDFLAGS)";
1200
1087
  PREBINDING = NO;
1201
1088
  "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
1202
1089
  SDKROOT = iphoneos3.2;
@@ -110,6 +110,7 @@ public:
110
110
  void loadUrl(String url);
111
111
 
112
112
  boolean isLocalServerStarted();
113
+ const char* getFreeListeningPort();
113
114
 
114
115
  protected:
115
116
  virtual void run();
@@ -117,7 +118,6 @@ protected:
117
118
  void initHttpServer();
118
119
  void initAppUrls();
119
120
 
120
- const char* getFreeListeningPort();
121
121
  net::INetRequest& getNet(){ return *m_NetRequest; }
122
122
  };
123
123
 
@@ -56,7 +56,8 @@ String CRhodesAppBase::canonicalizeRhoUrl(const String& strUrl)
56
56
  strncmp("javascript:", strUrl.c_str(), 11 ) == 0 ||
57
57
  strncmp("mailto:", strUrl.c_str(), 7) == 0 ||
58
58
  strncmp("tel:", strUrl.c_str(), 4) == 0 ||
59
- strncmp("wtai:", strUrl.c_str(), 5) == 0
59
+ strncmp("wtai:", strUrl.c_str(), 5) == 0 ||
60
+ strncmp("sms:", strUrl.c_str(), 4) == 0
60
61
  )
61
62
  return strUrl;
62
63
 
@@ -50,6 +50,12 @@ VALUE rho_sys_get_property(char* szPropName)
50
50
  if (strcasecmp("full_browser",szPropName) == 0)
51
51
  return rho_ruby_create_boolean(1);
52
52
 
53
+ if (strcasecmp("rhodes_port",szPropName) == 0)
54
+ return rho_ruby_create_integer(atoi(RHODESAPP().getFreeListeningPort()));
55
+
56
+ if (strcasecmp("is_emulator",szPropName) == 0)
57
+ return rho_ruby_create_boolean(0);
58
+
53
59
  RAWLOG_ERROR1("Unknown Rho::System property : %s", szPropName);
54
60
 
55
61
  return rho_ruby_get_NIL();
@@ -339,6 +339,18 @@ int rho_sysimpl_get_property(char* szPropName, VALUE* resValue)
339
339
  return 1;
340
340
  }
341
341
 
342
+ if (strcasecmp("is_emulator",szPropName) == 0)
343
+ {
344
+ bool bEmulator = false;
345
+ #ifdef OS_WINDOWS
346
+ bEmulator = true;
347
+ #else
348
+
349
+ #endif
350
+ *resValue = rho_ruby_create_boolean(bEmulator?1:0);
351
+ return 1;
352
+ }
353
+
342
354
  return 0;
343
355
  }
344
356
 
data/rhodes.gemspec CHANGED
@@ -3,7 +3,7 @@ require "lib/rhodes.rb"
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = %q{rhodes}
6
- s.version = '2.2.0'
6
+ s.version = '2.2.1.beta.1'
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.authors = ["Rhomobile"]
@@ -20,7 +20,7 @@ class SpecRunner < MSpecScript
20
20
 
21
21
  config[:files] << "spec/contacts_spec" unless System.get_property('device_name') == 'Win32'
22
22
  # Disable events specs on Android because emulator doesn't contain Calendar provider
23
- config[:files] << "spec/events_spec" unless System.get_property('device_name') == 'Win32' or System.get_property('platform') == 'ANDROID'
23
+ config[:files] << "spec/events_spec" unless System.get_property('device_name') == 'Win32' or (System.get_property('platform') == 'ANDROID' and System.get_property('is_emulator'))
24
24
 
25
25
  config[:files] << "spec/barcode_spec" unless System.get_property('device_name') == 'Win32'
26
26
  config[:files] << "spec/mapview_spec" unless System.get_property('platform') == 'WINDOWS'
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhodes
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
4
+ hash: 62196425
5
+ prerelease: true
6
6
  segments:
7
7
  - 2
8
8
  - 2
9
- - 0
10
- version: 2.2.0
9
+ - 1
10
+ - beta
11
+ - 1
12
+ version: 2.2.1.beta.1
11
13
  platform: ruby
12
14
  authors:
13
15
  - Rhomobile
@@ -15,7 +17,7 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2010-10-14 00:00:00 -07:00
20
+ date: 2010-10-18 00:00:00 -07:00
19
21
  default_executable:
20
22
  dependencies:
21
23
  - !ruby/object:Gem::Dependency