rhodes 2.0.0.beta7 → 2.0.0.beta8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. data/CHANGELOG +20 -1
  2. data/bin/rhodes-setup +6 -2
  3. data/lib/extensions/digest/ext/Rakefile +2 -2
  4. data/lib/framework/rho/render.rb +2 -0
  5. data/lib/framework/rho/rho.rb +159 -95
  6. data/lib/framework/rho/rhoapplication.rb +24 -5
  7. data/lib/framework/rhodes.rb +1 -1
  8. data/lib/framework/rhom/rhom_model.rb +32 -23
  9. data/lib/framework/rhom/rhom_object_factory.rb +2 -2
  10. data/lib/rhodes.rb +1 -1
  11. data/platform/android/Rhodes/jni/src/callbacks.cpp +8 -1
  12. data/platform/android/Rhodes/jni/src/mapview.cpp +4 -1
  13. data/platform/android/Rhodes/jni/src/sslimpl.cpp +5 -1
  14. data/platform/android/Rhodes/jni/src/webview.cpp +3 -1
  15. data/platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java +3 -2
  16. data/platform/android/Rhodes/src/com/rhomobile/rhodes/NativeLibraries.java +2 -2
  17. data/platform/android/Rhodes/src/com/rhomobile/rhodes/NavBar.java +1 -2
  18. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +1 -1
  19. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +3 -1
  20. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +0 -1
  21. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/MainView.java +4 -1
  22. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +24 -6
  23. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java +7 -2
  24. data/platform/android/build/android.rake +11 -38
  25. data/platform/android/build/androidcommon.rb +50 -2
  26. data/platform/android/build/librhocommon_build.files +1 -0
  27. data/platform/android/build/libsqlite_build.files +1 -0
  28. data/platform/bb/rhodes/platform/5.0/com/rho/BrowserAdapter5.java +2 -1
  29. data/platform/bb/rhodes/src/com/rho/BrowserAdapter.java +1 -5
  30. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +3 -6
  31. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +4 -2
  32. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +12 -35
  33. data/platform/bb/rhodes/src/rhomobile/Utilities.java +2 -1
  34. data/platform/iphone/Classes/DateTimePickerDelegate.m +4 -4
  35. data/platform/iphone/Classes/NativeBar.m +12 -6
  36. data/platform/iphone/Classes/NavBar.m +1 -1
  37. data/platform/iphone/Classes/RhoMainView.h +4 -1
  38. data/platform/iphone/Classes/Rhodes.h +6 -2
  39. data/platform/iphone/Classes/Rhodes.m +23 -3
  40. data/platform/iphone/Classes/SimpleMainView.h +3 -7
  41. data/platform/iphone/Classes/SimpleMainView.m +108 -54
  42. data/platform/iphone/Classes/TabbedMainView.h +3 -2
  43. data/platform/iphone/Classes/TabbedMainView.m +21 -10
  44. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +8 -0
  45. data/platform/shared/common/IRhoClassFactory.h +1 -0
  46. data/platform/shared/common/RhodesApp.cpp +7 -2
  47. data/platform/shared/common/ThreadQueue.cpp +110 -0
  48. data/platform/shared/common/ThreadQueue.h +75 -0
  49. data/platform/shared/logging/RhoLogCat.h +4 -0
  50. data/platform/shared/net/AsyncHttp.cpp +134 -135
  51. data/platform/shared/net/AsyncHttp.h +74 -33
  52. data/platform/shared/net/HttpServer.cpp +7 -1
  53. data/platform/shared/ruby/thread.c +4 -0
  54. data/platform/shared/ruby/thread_win32.c +9 -8
  55. data/platform/shared/rubyJVM/src/com/rho/RhodesApp.java +26 -5
  56. data/platform/shared/rubyJVM/src/com/rho/net/INetworkAccess.java +0 -2
  57. data/platform/shared/rubyJVM/src/com/rho/net/NetRequest.java +4 -13
  58. data/platform/shared/rubyJVM/src/com/rho/net/URI.java +2 -2
  59. data/platform/shared/rubyJVM/src/com/rho/sync/SyncEngine.java +3 -3
  60. data/platform/shared/rubyJVM/src/com/xruby/runtime/builtin/ObjectFactory.java +12 -2
  61. data/platform/shared/rubyJVM/src/com/xruby/runtime/builtin/RubyString.java +6 -3
  62. data/platform/shared/rubyJVM/src/javolution/util/FastTable.java +12 -2
  63. data/platform/shared/sync/SyncEngine.cpp +15 -3
  64. data/platform/shared/sync/SyncEngine.h +1 -1
  65. data/platform/shared/sync/SyncThread.cpp +18 -101
  66. data/platform/shared/sync/SyncThread.h +30 -22
  67. data/platform/wm/RhoLib/RhoLib.vcproj +8 -0
  68. data/platform/wm/rhodes/Rhodes.cpp +143 -1
  69. data/platform/wm/rhodes/memory_helper.cpp +273 -0
  70. data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +1 -0
  71. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +46 -3
  72. data/platform/wm/rhodes/rho/rubyext/WebView.cpp +29 -1
  73. data/res/build-tools/db/syncdb.schema +1 -0
  74. data/res/generators/rhogen.rb +1 -1
  75. data/rhodes.gemspec +2 -2
  76. metadata +23 -6
  77. data/Manifest.txt +0 -5289
  78. data/rhobuild.yml +0 -37
@@ -35,10 +35,6 @@ ANDROID_PERMISSIONS = {
35
35
  'vibrate' => 'VIBRATE'
36
36
  }
37
37
 
38
- def get_sources(name)
39
- File.read(File.join($builddir, name + '_build.files')).split("\n")
40
- end
41
-
42
38
  def set_app_name_android(newname)
43
39
  puts "set_app_name"
44
40
  $stdout.flush
@@ -446,7 +442,7 @@ namespace "build" do
446
442
  objdir = $objdir["sqlite"]
447
443
  libname = $libname["sqlite"]
448
444
 
449
- cc_compile File.join(srcdir, "sqlite3.c"), objdir, ["-I#{srcdir}"] or exit 1
445
+ cc_build 'libsqlite', objdir, ["-I#{srcdir}"] or exit 1
450
446
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
451
447
  end
452
448
 
@@ -468,9 +464,7 @@ namespace "build" do
468
464
  args << "-I#{srcdir}/../include"
469
465
  args << "-I#{srcdir}"
470
466
 
471
- get_sources('libcurl').each do |f|
472
- cc_compile f, objdir, args or exit 1
473
- end
467
+ cc_build 'libcurl', objdir, args or exit 1
474
468
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
475
469
  end
476
470
 
@@ -486,10 +480,7 @@ namespace "build" do
486
480
  args << "-I#{srcdir}/.."
487
481
  args << "-I#{srcdir}/../sqlite"
488
482
 
489
- get_sources('libruby').each do |f|
490
- cc_compile f, objdir, args or exit 1
491
- end
492
-
483
+ cc_build 'libruby', objdir, args or exit 1
493
484
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
494
485
  end
495
486
 
@@ -503,10 +494,7 @@ namespace "build" do
503
494
  args << "-D__NEW__" if USE_STLPORT
504
495
  args << "-I#{$stlport_includes}" if USE_STLPORT
505
496
 
506
- objects = []
507
- get_sources('libjson').each do |f|
508
- cc_compile f, objdir, args or exit 1
509
- end
497
+ cc_build 'libjson', objdir, args or exit 1
510
498
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
511
499
  end
512
500
 
@@ -532,9 +520,7 @@ namespace "build" do
532
520
  args << "-fno-rtti"
533
521
  args << "-fno-exceptions"
534
522
 
535
- get_sources('libstlport').each do |f|
536
- cc_compile f, objdir, args or exit 1
537
- end
523
+ cc_build 'libstlport', objdir, args or exit 1
538
524
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
539
525
  end
540
526
  end
@@ -549,9 +535,7 @@ namespace "build" do
549
535
  args << "-D__NEW__" if USE_STLPORT
550
536
  args << "-I#{$stlport_includes}" if USE_STLPORT
551
537
 
552
- get_sources('librholog').each do |f|
553
- cc_compile f, objdir, args or exit 1
554
- end
538
+ cc_build 'librholog', objdir, args or exit 1
555
539
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
556
540
  end
557
541
 
@@ -564,9 +548,7 @@ namespace "build" do
564
548
  args << "-D__NEW__" if USE_STLPORT
565
549
  args << "-I#{$stlport_includes}" if USE_STLPORT
566
550
 
567
- get_sources('librhomain').each do |f|
568
- cc_compile f, objdir, args or exit 1
569
- end
551
+ cc_build 'librhomain', objdir, args or exit 1
570
552
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
571
553
  end
572
554
 
@@ -579,10 +561,7 @@ namespace "build" do
579
561
  args << "-D__NEW__" if USE_STLPORT
580
562
  args << "-I#{$stlport_includes}" if USE_STLPORT
581
563
 
582
- objects = []
583
- get_sources('librhocommon').each do |f|
584
- cc_compile f, objdir, args or exit 1
585
- end
564
+ cc_build 'librhocommon', objdir, args or exit 1
586
565
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
587
566
  end
588
567
 
@@ -597,9 +576,7 @@ namespace "build" do
597
576
  args << "-D__NEW__" if USE_STLPORT
598
577
  args << "-I#{$stlport_includes}" if USE_STLPORT
599
578
 
600
- get_sources('librhodb').each do |f|
601
- cc_compile f, objdir, args or exit 1
602
- end
579
+ cc_build 'librhodb', objdir, args or exit 1
603
580
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
604
581
  end
605
582
 
@@ -614,9 +591,7 @@ namespace "build" do
614
591
  args << "-D__NEW__" if USE_STLPORT
615
592
  args << "-I#{$stlport_includes}" if USE_STLPORT
616
593
 
617
- get_sources('librhosync').each do |f|
618
- cc_compile f, objdir, args or exit 1
619
- end
594
+ cc_build 'librhosync', objdir, args or exit 1
620
595
  cc_ar libname, Dir.glob(objdir + "/**/*.o") or exit 1
621
596
  end
622
597
 
@@ -739,9 +714,7 @@ namespace "build" do
739
714
  args << "-D__NEW__" if USE_STLPORT
740
715
  args << "-I#{$stlport_includes}" if USE_STLPORT
741
716
 
742
- get_sources('librhodes').each do |f|
743
- cc_compile f, objdir, args or exit 1
744
- end
717
+ cc_build 'librhodes', objdir, args or exit 1
745
718
 
746
719
  deps = []
747
720
  $libname.each do |k,v|
@@ -15,6 +15,24 @@ else
15
15
  $ndkhost = `uname -s`.downcase!.chomp! + "-x86"
16
16
  end
17
17
 
18
+ def num_cpus
19
+ if RUBY_PLATFORM =~ /linux/
20
+ num = `cat /proc/cpuinfo | grep processor | wc -l`
21
+ elsif RUBY_PLATFORM =~ /darwin/
22
+ num = `sysctl -n hw.ncpu`
23
+ elsif RUBY_PLATFORM =~ /w(in)?32/
24
+ num = ENV['NUMBER_OF_PROCESSORS']
25
+ else
26
+ num '1'
27
+ end
28
+ num.gsub!("\n", '')
29
+ num.to_i
30
+ end
31
+
32
+ def get_sources(name)
33
+ File.read(File.join($builddir, name + '_build.files')).split("\n")
34
+ end
35
+
18
36
  def setup_ndk(ndkpath,apilevel)
19
37
  $ndkgccver = "unknown"
20
38
  ["4.4.0", "4.2.1"].each do |ver|
@@ -163,6 +181,36 @@ def cc_compile(filename, objdir, additional = nil)
163
181
  cc_run(ccbin, args)
164
182
  end
165
183
 
184
+ def cc_build(name, objdir, additional = nil)
185
+ jobs = num_cpus
186
+ jobs += 1 if jobs > 1
187
+
188
+ srcs = []
189
+ jobs.times.each { |x| srcs << [] }
190
+ sources = get_sources(name)
191
+ sources.each do |src|
192
+ idx = sources.index(src)%jobs
193
+ srcs[idx] << src
194
+ end
195
+
196
+ ths = []
197
+ jobs.times.each do |x|
198
+ ths << Thread.new do
199
+ srcs[x].each do |src|
200
+ cc_compile src, objdir, additional or return 1
201
+ end
202
+ 0
203
+ end
204
+ end
205
+
206
+ ret = 0
207
+ ths.each do |th|
208
+ v = th.value
209
+ ret = v unless v == 0
210
+ end
211
+ ret
212
+ end
213
+
166
214
  def cc_ar(libname, objects)
167
215
  return true if FileUtils.uptodate? libname, objects
168
216
  cc_run($arbin, ["crs", libname] + objects)
@@ -197,10 +245,10 @@ def cc_link(outname, objects, additional = nil, deps = nil)
197
245
  end
198
246
  args += $cxxlibs
199
247
  $libgcc = `#{$gccbin} -mthumb-interwork -print-file-name=libgcc.a`.gsub("\n", "") if $libgcc.nil?
200
- args << $libgcc
248
+ args << $libgcc if $ndkgccver != "4.2.1"
201
249
  args << "#{$ndksysroot}/usr/lib/libc.so"
202
250
  args << "#{$ndksysroot}/usr/lib/libm.so"
203
- args << $libgcc
251
+ args << $libgcc if $ndkgccver == "4.2.1"
204
252
  cc_run($gccbin, args)
205
253
  end
206
254
 
@@ -3,6 +3,7 @@ platform/shared/common/PosixThreadImpl.cpp
3
3
  platform/shared/common/RhoConf.cpp
4
4
  platform/shared/common/RhoFile.cpp
5
5
  platform/shared/common/RhoThread.cpp
6
+ platform/shared/common/ThreadQueue.cpp
6
7
  platform/shared/common/SplashScreen.cpp
7
8
  platform/shared/common/Tokenizer.cpp
8
9
  platform/shared/common/AppMenu.cpp
@@ -0,0 +1 @@
1
+ platform/shared/sqlite/sqlite3.c
@@ -7,6 +7,7 @@ import net.rim.device.api.system.Application;
7
7
  import javax.microedition.io.HttpConnection;
8
8
  import javax.microedition.io.InputConnection;
9
9
 
10
+ import com.rho.RhodesApp;
10
11
  import com.rho.net.URI;
11
12
 
12
13
  import rhomobile.Utilities;
@@ -54,7 +55,7 @@ public class BrowserAdapter5 implements IBrowserAdapter
54
55
  throws Exception
55
56
  {
56
57
  String url = request.getURL();
57
- if ( URI.isLocalHost(url) || URI.isLocalData(url))
58
+ if ( RhodesApp.getInstance().isRhodesAppUrl(url) || URI.isLocalData(url))
58
59
  {
59
60
  HttpConnection connection = Utilities.makeConnection(url, request.getHeaders(), null, null);
60
61
 
@@ -76,8 +76,6 @@ public class BrowserAdapter implements RenderingApplication, IBrowserAdapter
76
76
 
77
77
  UrlRequestedEvent urlRequestedEvent = (UrlRequestedEvent) event;
78
78
  String absoluteUrl = urlRequestedEvent.getURL();
79
- //if ( !absoluteUrl.startsWith(_httpRoot) )
80
- // absoluteUrl = _httpRoot + absoluteUrl.substring(_httpRoot.length()-5);
81
79
 
82
80
  if ( urlRequestedEvent.getPostData() == null ||
83
81
  urlRequestedEvent.getPostData().length == 0 )
@@ -138,8 +136,6 @@ public class BrowserAdapter implements RenderingApplication, IBrowserAdapter
138
136
  // MSIE, Mozilla, and Opera all send the original
139
137
  // request's Referer as the Referer for the new
140
138
  // request.
141
- //if ( !absoluteUrl.startsWith(_httpRoot) )
142
- // absoluteUrl = _httpRoot + absoluteUrl.substring(_httpRoot.length()-5);
143
139
 
144
140
  m_app.addToHistory(absoluteUrl,referrer);
145
141
  Object eventSource = e.getSource();
@@ -257,7 +253,7 @@ public class BrowserAdapter implements RenderingApplication, IBrowserAdapter
257
253
  {
258
254
  if (referrer == null || URI.isLocalData(url) || !m_bLoadImageAsync)
259
255
  {
260
- boolean bLocalHost = URI.isLocalHost(url);
256
+ boolean bLocalHost = RhodesApp.getInstance().isRhodesAppUrl(url);
261
257
  if ( bLocalHost && m_connResource!= null)
262
258
  {
263
259
  com.rho.net.RhoConnection rhoConn = (com.rho.net.RhoConnection)((com.rho.net.bb.NativeBBHttpConnection)m_connResource).getNativeConnection();
@@ -13,6 +13,7 @@ import com.rho.BBVersionSpecific;
13
13
  import com.rho.RhoEmptyLogger;
14
14
  import com.rho.RhoLogger;
15
15
  import com.rho.RhoConf;
16
+ import com.rho.RhodesApp;
16
17
  import com.rho.net.bb.BBHttpConnection;
17
18
  import net.rim.device.api.servicebook.ServiceRecord;
18
19
  import net.rim.device.api.servicebook.ServiceBook;
@@ -28,12 +29,8 @@ public class NetworkAccess implements INetworkAccess {
28
29
  private static boolean bes = true;
29
30
  private static long m_nMaxPacketSize = 0;
30
31
 
31
- public String getHomeUrl()
32
+ public void configure()
32
33
  {
33
- return "http://localhost:8080/";
34
- }
35
-
36
- public void configure() {
37
34
  networkConfigured = false;
38
35
  bes = false;
39
36
  URLsuffix = null;
@@ -156,7 +153,7 @@ public class NetworkAccess implements INetworkAccess {
156
153
 
157
154
  public IHttpConnection connect(String url, boolean ignoreSuffixOnSim) throws IOException
158
155
  {
159
- if ( URI.isLocalHost(url) )
156
+ if ( RhodesApp.getInstance().isRhodesAppUrl(url) )
160
157
  {
161
158
  URI uri = new URI(url);
162
159
  return new RhoConnection(uri);
@@ -109,8 +109,10 @@ public class System {
109
109
  });
110
110
  klass.getSingletonClass().defineMethod("exit", new RubyNoArgMethod() {
111
111
  protected RubyValue run(RubyValue receiver, RubyBlock block) {
112
- RhodesApplication.getInstance().close();
113
- return RubyConstant.QNIL;
112
+ synchronized(RhodesApplication.getInstance().getEventLock()) {
113
+ RhodesApplication.getInstance().close();
114
+ return RubyConstant.QNIL;
115
+ }
114
116
  }
115
117
  });
116
118
  }
@@ -112,34 +112,15 @@ final public class RhodesApplication extends UiApplication implements SystemList
112
112
  public boolean trackwheelUnclick(int status, int time) {return false;}
113
113
  }
114
114
 
115
- boolean isExternalUrl(String strUrl)
116
- {
117
- return strUrl.startsWith("http://") || strUrl.startsWith("https://") ||
118
- strUrl.startsWith("javascript:") || strUrl.startsWith("mailto:")
119
- || strUrl.startsWith("tel:")|| strUrl.startsWith("wtai:");
120
- }
121
-
122
- String canonicalizeURL( String url ){
123
- if ( url == null || url.length() == 0 )
124
- return "";
125
-
126
- url.replace('\\', '/');
127
- if ( !url.startsWith(_httpRoot) && !isExternalUrl(url) )
128
- url = FilePath.join(_httpRoot,url);
129
-
130
- return url;
131
- }
132
-
133
115
  public void navigateUrl(String url){
134
116
  PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread(
135
- canonicalizeURL(url), null, null, null);
117
+ RHODESAPP().canonicalizeRhoUrl(url), null, null, null);
136
118
  thread.start();
137
119
  }
138
120
 
139
- public String getPathForMenuItem(String url) {
140
- url = _httpRoot +
141
- url.substring(url.charAt(0) == '\\' || url.charAt(0) == '/' ? 1 : 0 );
142
- return url;
121
+ public String getPathForMenuItem(String url)
122
+ {
123
+ return RHODESAPP().canonicalizeRhoUrl(url);
143
124
  }
144
125
 
145
126
  public void addMenuItem(String label, String value){
@@ -160,7 +141,7 @@ final public class RhodesApplication extends UiApplication implements SystemList
160
141
 
161
142
  public void postUrl(String url, String body, HttpHeaders headers, Runnable callback){
162
143
  PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread(
163
- canonicalizeURL(url), headers, body.getBytes(), null, callback);
144
+ RHODESAPP().canonicalizeRhoUrl(url), headers, body.getBytes(), null, callback);
164
145
  thread.setInternalRequest(true);
165
146
  thread.start();
166
147
  }
@@ -188,7 +169,7 @@ final public class RhodesApplication extends UiApplication implements SystemList
188
169
  }
189
170
  public void postUrlWithCallback(String url, String body, HttpHeaders headers, NetCallback netCallback){
190
171
  PrimaryResourceFetchThread thread = new PrimaryResourceFetchThread(
191
- canonicalizeURL(url), headers, body.getBytes(), null);
172
+ RHODESAPP().canonicalizeRhoUrl(url), headers, body.getBytes(), null);
192
173
  thread.setNetCallback(netCallback);
193
174
  thread.start();
194
175
  }
@@ -263,8 +244,9 @@ final public class RhodesApplication extends UiApplication implements SystemList
263
244
  strUrl = removeSemicolon(strUrl);
264
245
  refferer = removeSemicolon(refferer);
265
246
 
266
- if ( !strUrl.startsWith(_httpRoot) && !isExternalUrl(strUrl) )
267
- strUrl = _httpRoot + (strUrl.startsWith("/") ? strUrl.substring(1) : strUrl);
247
+ strUrl = RHODESAPP().canonicalizeRhoUrl(strUrl);
248
+ // if ( !strUrl.startsWith(_httpRoot) && !isExternalUrl(strUrl) )
249
+ // strUrl = _httpRoot + (strUrl.startsWith("/") ? strUrl.substring(1) : strUrl);
268
250
 
269
251
  int nPos = -1;
270
252
  for( int i = 0; i < _history.size(); i++ ){
@@ -356,8 +338,6 @@ final public class RhodesApplication extends UiApplication implements SystemList
356
338
 
357
339
  private Vector _history;
358
340
 
359
- private final String _httpRoot = "http://localhost:8080/";
360
-
361
341
  private static boolean m_isFullBrowser = false;
362
342
 
363
343
  private static PushListeningThread _pushListeningThread = null;
@@ -1109,13 +1089,10 @@ final public class RhodesApplication extends UiApplication implements SystemList
1109
1089
  navigateUrl((String)_history.lastElement());
1110
1090
  }
1111
1091
 
1112
- void navigateHome(){
1092
+ void navigateHome()
1093
+ {
1113
1094
  String strHomePage = RhoRuby.getStartPage();
1114
- String strStartPage = _httpRoot;
1115
- if ( strHomePage != null && strHomePage.length() > 0 )
1116
- {
1117
- strStartPage = _httpRoot.substring(0, _httpRoot.length()-1) + strHomePage;
1118
- }
1095
+ String strStartPage = RhodesApp.getInstance().canonicalizeRhoUrl(strHomePage);
1119
1096
 
1120
1097
  _history.removeAllElements();
1121
1098
  _history.addElement(strStartPage);
@@ -11,6 +11,7 @@ import net.rim.device.api.io.http.HttpProtocolConstants;
11
11
  import net.rim.device.api.util.StringUtilities;
12
12
 
13
13
  import com.rho.RhoClassFactory;
14
+ import com.rho.RhodesApp;
14
15
  import com.rho.net.URI;
15
16
  import com.rho.net.IHttpConnection;
16
17
  import com.rho.net.bb.NativeBBHttpConnection;
@@ -30,7 +31,7 @@ public class Utilities {
30
31
 
31
32
  if ( conn == null )
32
33
  {
33
- if ( URI.isLocalHost(url) )
34
+ if ( RhodesApp.getInstance().isRhodesAppUrl(url) )
34
35
  {
35
36
  URI uri = new URI(url);
36
37
  conn = new NativeBBHttpConnection( new RhoConnection(uri) );
@@ -71,7 +71,10 @@
71
71
 
72
72
  // Create the picker
73
73
  if (self.pickerView == nil) {
74
- self.pickerView = [[UIDatePicker alloc] initWithFrame:CGRectZero];
74
+ CGRect frame = parentFrame;
75
+ frame.size.height = 220;
76
+ frame.origin.y = parentFrame.origin.y + parentFrame.size.height - frame.size.height;
77
+ self.pickerView = [[UIDatePicker alloc] initWithFrame:frame];
75
78
  }
76
79
 
77
80
  if (self.pickerView.superview == nil) {
@@ -97,9 +100,6 @@
97
100
 
98
101
  //CGSize pickerSize = CGSizeMake(parentFrame.size.width, parentFrame.size.height/2);
99
102
  CGSize pickerSize = [pickerView sizeThatFits:pickerView.frame.size];
100
- pickerSize.width = parentFrame.size.width;
101
- if (pickerSize.height > parentFrame.size.height)
102
- pickerSize.height = parentFrame.size.height;
103
103
  CGRect pickerFrame = CGRectMake(parentFrame.origin.x,
104
104
  parentFrame.origin.y + parentFrame.size.height - pickerSize.height,
105
105
  pickerSize.width,
@@ -27,26 +27,32 @@
27
27
  [value getValue:&type];
28
28
 
29
29
  id view = nil;
30
+
31
+ Rhodes *r = [Rhodes sharedInstance];
32
+ //UIWindow *window = [[Rhodes sharedInstance] rootWindow];
33
+ //CGRect frame = [Rhodes applicationFrame];
30
34
 
31
- UIWindow *window = [[Rhodes sharedInstance] rootWindow];
32
- CGRect frame = [Rhodes applicationFrame];
35
+ id mainView = [r mainView];
33
36
 
34
37
  switch (type) {
35
38
  case NOBAR_TYPE:
36
- view = [[SimpleMainView alloc] initWithParentView:window frame:frame];
39
+ //view = [[SimpleMainView alloc] initWithParentView:window frame:frame];
40
+ view = [[SimpleMainView alloc] initWithMainView:mainView];
37
41
  break;
38
42
  case TOOLBAR_TYPE:
39
- view = [[SimpleMainView alloc] initWithParentView:window frame:frame toolbar:items];
43
+ //view = [[SimpleMainView alloc] initWithParentView:window frame:frame toolbar:items];
44
+ view = [[SimpleMainView alloc] initWithMainView:mainView toolbar:items];
40
45
  break;
41
46
  case TABBAR_TYPE:
42
- view = [[TabbedMainView alloc] initWithParentView:window frame:frame items:items];
47
+ //view = [[TabbedMainView alloc] initWithParentView:window frame:frame items:items];
48
+ view = [[TabbedMainView alloc] initWithMainView:mainView tabs:items];
43
49
  break;
44
50
  default:
45
51
  RAWLOG_ERROR1("Unknown bar type passed: %d", type);
46
52
  return;
47
53
  }
48
54
 
49
- [Rhodes sharedInstance].mainView = view;
55
+ [r setMainView:view];
50
56
  [view release];
51
57
  }
52
58
  @end