rhodes 2.0.0.beta1 → 2.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/CHANGELOG +5 -0
  2. data/LICENSE +19 -674
  3. data/Manifest.txt +21 -4
  4. data/README.textile +5 -36
  5. data/Rakefile +5 -0
  6. data/lib/build/jake.rb +3 -1
  7. data/lib/extensions/rexml/rexml/document.rb +2 -0
  8. data/lib/extensions/rexml/rexml/parsers/baseparser.rb +0 -6
  9. data/lib/extensions/rhoxml/rexml/child.rb +96 -0
  10. data/lib/extensions/rhoxml/rexml/document.rb +527 -0
  11. data/lib/extensions/rhoxml/rexml/element.rb +987 -0
  12. data/lib/extensions/rhoxml/rexml/encoding.rb +71 -0
  13. data/lib/extensions/rhoxml/rexml/encodings/US-ASCII.rb +30 -0
  14. data/lib/extensions/rhoxml/rexml/encodings/UTF-16.rb +35 -0
  15. data/lib/extensions/rhoxml/rexml/encodings/UTF-8.rb +18 -0
  16. data/lib/extensions/rhoxml/rexml/namespace.rb +47 -0
  17. data/lib/extensions/rhoxml/rexml/node.rb +76 -0
  18. data/lib/extensions/rhoxml/rexml/parent.rb +166 -0
  19. data/lib/extensions/rhoxml/rexml/parseexception.rb +51 -0
  20. data/lib/extensions/rhoxml/rexml/parsers/baseparser.rb +531 -0
  21. data/lib/extensions/rhoxml/rexml/parsers/treeparser.rb +100 -0
  22. data/lib/extensions/rhoxml/rexml/parsers/xpathparser.rb +698 -0
  23. data/lib/extensions/rhoxml/rexml/set.rb +1274 -0
  24. data/lib/extensions/rhoxml/rexml/source.rb +258 -0
  25. data/lib/extensions/rhoxml/rexml/xmltokens.rb +18 -0
  26. data/lib/extensions/rhoxml/rexml/xpath.rb +77 -0
  27. data/lib/extensions/rhoxml/rexml/xpath_parser.rb +806 -0
  28. data/lib/framework/builtinME.rb +2 -0
  29. data/lib/framework/dateME.rb +5 -1
  30. data/lib/framework/rho/render.rb +10 -2
  31. data/lib/framework/rhom/rhom_object_factory.rb +2 -1
  32. data/lib/framework/singleton.rb +1 -1
  33. data/platform/android/Rhodes/jni/src/rhodes.cpp +2 -4
  34. data/platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java +23 -18
  35. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +42 -69
  36. data/platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java +59 -7
  37. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/Camera.java +1 -1
  38. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java +1 -0
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java +97 -85
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/uri/SmsUriHandler.java +52 -0
  41. data/platform/android/build/RhodesSRC_build.files +1 -0
  42. data/platform/android/build/android.rake +38 -14
  43. data/platform/bb/RubyVM/RubyVM.jdp +1 -0
  44. data/platform/bb/build/RubyVM_build.files +1 -0
  45. data/platform/bb/build/bb.rake +44 -2
  46. data/platform/bb/rhodes/platform/5.0/com/rho/BrowserAdapter5.java +1 -1
  47. data/platform/bb/rhodes/rhodes.jdp +4 -4
  48. data/platform/bb/rhodes/src/com/rho/BrowserAdapter.java +8 -4
  49. data/platform/bb/rhodes/src/com/rho/rubyext/Alert.java +149 -17
  50. data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +20 -17
  51. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +54 -28
  52. data/platform/bb/rhodes/src/rhomobile/mapview/Annotation.java +1 -0
  53. data/platform/bb/rhodes/src/rhomobile/mapview/GoogleMapField.java +37 -11
  54. data/platform/bb/rhodes/src/rhomobile/mapview/MapView.java +49 -19
  55. data/platform/bb/rhodes/src/rhomobile/mapview/MapViewScreen.java +6 -0
  56. data/platform/iphone/Classes/MapView/GoogleGeocoder.h +6 -7
  57. data/platform/iphone/Classes/MapView/GoogleGeocoder.m +70 -70
  58. data/platform/iphone/Classes/MapView/MapAnnotation.h +5 -3
  59. data/platform/iphone/Classes/MapView/MapAnnotation.m +10 -8
  60. data/platform/iphone/Classes/MapView/MapViewController.h +13 -10
  61. data/platform/iphone/Classes/MapView/MapViewController.m +131 -72
  62. data/platform/iphone/Classes/Rhodes.h +2 -0
  63. data/platform/iphone/Classes/Rhodes.m +13 -1
  64. data/platform/iphone/Classes/SimpleMainView.m +0 -1
  65. data/platform/iphone/Classes/TabbedMainView.m +5 -6
  66. data/platform/shared/common/RhoTime.h +2 -2
  67. data/platform/shared/common/RhodesApp.cpp +1 -1
  68. data/platform/shared/db/DBAdapter.cpp +6 -0
  69. data/platform/shared/net/CURLNetRequest.cpp +23 -1
  70. data/platform/shared/ruby/thread_win32.c +9 -1
  71. data/platform/shared/rubyJVM/src/com/rho/Capabilities.java +6 -0
  72. data/platform/shared/rubyJVM/src/com/rho/RhodesApp.java +1 -1
  73. data/platform/shared/rubyJVM/src/com/rho/sync/ClientRegister.java +1 -1
  74. data/platform/shared/rubyJVM/src/com/xruby/GeneratedMethods/RubySymbol_Methods.java +6 -1
  75. data/platform/shared/rubyJVM/src/com/xruby/GeneratedMethods/RubyTime_Methods.java +3 -3
  76. data/platform/shared/rubyJVM/src/com/xruby/runtime/builtin/InputStreamExecutor.java +1 -1
  77. data/platform/shared/rubyJVM/src/com/xruby/runtime/builtin/RubyArray.java +15 -3
  78. data/platform/shared/rubyJVM/src/com/xruby/runtime/builtin/RubyString.java +10 -2
  79. data/platform/shared/rubyJVM/src/com/xruby/runtime/builtin/RubyTime.java +12 -1
  80. data/platform/shared/rubyJVM/src/com/xruby/runtime/lang/RubyKernelModule.java +18 -9
  81. data/platform/shared/rubyJVM/src/com/xruby/runtime/lang/RubySymbol.java +5 -0
  82. data/platform/shared/rubyJVM/src/org/json/me/JSONArray.java +2 -1
  83. data/platform/shared/unzip/unzip.cpp +1 -1
  84. data/platform/wm/build/wm.rake +27 -6
  85. data/platform/wm/rhodes/Alert.cpp +335 -5
  86. data/platform/wm/rhodes/Alert.h +84 -1
  87. data/platform/wm/rhodes/MainWindow.cpp +28 -6
  88. data/platform/wm/rhodes/MainWindow.h +7 -2
  89. data/platform/wm/rhodes/Rhodes.cpp +23 -0
  90. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +2 -1
  91. data/platform/wm/rhodes/stdafx.h +1 -0
  92. data/platform/wm/tools/detool/detool.cpp +405 -14
  93. data/rakefile.rb +5 -0
  94. data/res/build-tools/detool.exe +0 -0
  95. data/res/generators/rhogen.rb +2 -0
  96. data/rhodes.gemspec +1 -1
  97. data/spec/framework_spec/app/spec/fixtures/object_values.txt +1 -1
  98. data/spec/framework_spec/app/spec/pagination/fixtures/object_values.txt +1 -1
  99. data/spec/framework_spec/app/spec/rhom_object_spec.rb +12 -12
  100. metadata +23 -6
  101. data/LICENSING_OPTIONS +0 -1
  102. data/platform/bb/build/rhodesApp.rapc +0 -9
  103. data/res/generators/templates/source/source_adapter.rb +0 -48
  104. data/rhobuild.yml +0 -37
@@ -259,6 +259,8 @@ class IO
259
259
  end
260
260
  close
261
261
  end
262
+
263
+ alias each_line each
262
264
  end
263
265
 
264
266
  class Time
@@ -42,7 +42,11 @@ class Date
42
42
  end
43
43
 
44
44
  def to_s() format('%.4d-%02d-%02d', year(), mon(), mday()) end # 4p
45
-
45
+
46
+ def self.civil(y=-4712, m=1, d=1, sg=2299161)
47
+ Date.new( Time.new(y,m,d) )
48
+ end
49
+
46
50
  def _get_date
47
51
  @m_date
48
52
  end
@@ -196,7 +196,15 @@ module Rho
196
196
  modelpath = Rho::RhoFSConnector.get_model_path("app",model) if model
197
197
  content = eval_compiled_file(modelpath+'_' + partial_name.to_s+'_erb.iseq', locals.get_binding )
198
198
  else
199
+ #xruby issue - https://www.pivotaltracker.com/story/show/3454121
200
+ content = render_partial_collection(options,partial_name)
201
+ end
202
+ content
203
+ end
204
+
205
+ def render_partial_collection(options, partial_name)
199
206
  i = 0
207
+ content = ""
200
208
  options[:collection].each do |x|
201
209
  options[:locals][partial_name] = x
202
210
 
@@ -205,8 +213,8 @@ module Rho
205
213
  #puts "render partial: #{x}"
206
214
  content += render_partial :partial => options[:partial], :locals => options[:locals]
207
215
  end
208
- end
209
- content
216
+
217
+ content
210
218
  end
211
219
 
212
220
  @@m_geoview_callback = nil
@@ -441,7 +441,7 @@ module Rhom
441
441
  listAttrs = sql.length > 0 ? db.execute_sql(sql,values) : []
442
442
 
443
443
  new_obj = self.new
444
- new_obj.vars.merge!({:object=>"{#{obj['object']}}"})
444
+ new_obj.vars.merge!({:object=>"#{obj['object']}"})
445
445
 
446
446
  if attribs && obj['attrib']
447
447
  new_obj.vars.merge!( {obj['attrib'].to_sym()=>obj['value'] }) if obj['value']
@@ -805,6 +805,7 @@ module Rhom
805
805
  # deletes the record from the viewable list as well as
806
806
  # adding a delete record to the list of sync operations
807
807
  def destroy
808
+ puts "destroy: #{self}"
808
809
  obj = self.object #self.inst_strip_braces(self.object)
809
810
  update_type='delete'
810
811
 
@@ -60,7 +60,7 @@
60
60
  # and _dump(depth) hooks allows the (partially) resurrections of
61
61
  # a previous state of ``the instance''.
62
62
 
63
- require 'thread'
63
+ #require 'thread'
64
64
 
65
65
  module Singleton
66
66
  # disable build-in copying methods
@@ -391,10 +391,8 @@ RHO_GLOBAL jstring JNICALL Java_com_rhomobile_rhodes_Rhodes_normalizeUrl
391
391
  (JNIEnv *, jobject, jstring strUrl)
392
392
  {
393
393
  std::string const &s = rho_cast<std::string>(strUrl);
394
- char *normalized = rho_http_normalizeurl(s.c_str());
395
- jstring newStr = rho_cast<jstring>(normalized);
396
- free(normalized);
397
- return newStr;
394
+ std::string const &cs = RHODESAPP().canonicalizeRhoUrl(s);
395
+ return rho_cast<jstring>(cs);
398
396
  }
399
397
 
400
398
  RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_Rhodes_navigateBack
@@ -45,25 +45,30 @@ public class NativeBar {
45
45
  }
46
46
 
47
47
  public void run() {
48
- Rhodes r = RhodesInstance.getInstance();
49
- MainView v = null;
50
-
51
- switch (type) {
52
- case NOBAR_TYPE:
53
- v = new SimpleMainView();
54
- break;
55
- case TOOLBAR_TYPE:
56
- v = new SimpleMainView(params);
57
- break;
58
- case TABBAR_TYPE:
59
- v = new TabbedMainView(params);
60
- break;
61
- default:
62
- Logger.E(TAG, "Unknown bar type passed: " + type);
48
+ try {
49
+ Rhodes r = RhodesInstance.getInstance();
50
+ MainView v = null;
51
+
52
+ switch (type) {
53
+ case NOBAR_TYPE:
54
+ v = new SimpleMainView();
55
+ break;
56
+ case TOOLBAR_TYPE:
57
+ v = new SimpleMainView(params);
58
+ break;
59
+ case TABBAR_TYPE:
60
+ v = new TabbedMainView(params);
61
+ break;
62
+ default:
63
+ Logger.E(TAG, "Unknown bar type passed: " + type);
64
+ }
65
+
66
+ if (v != null)
67
+ r.setMainView(v);
68
+ }
69
+ catch (Exception e) {
70
+ reportFail("CreateTask", e);
63
71
  }
64
-
65
- if (v != null)
66
- r.setMainView(v);
67
72
  }
68
73
 
69
74
  };
@@ -29,11 +29,11 @@ import java.util.Vector;
29
29
  import com.rhomobile.rhodes.Utils.AssetsSource;
30
30
  import com.rhomobile.rhodes.Utils.FileSource;
31
31
  import com.rhomobile.rhodes.mainview.MainView;
32
- import com.rhomobile.rhodes.mainview.SimpleMainView;
33
32
  import com.rhomobile.rhodes.ui.AboutDialog;
34
33
  import com.rhomobile.rhodes.ui.LogOptionsDialog;
35
34
  import com.rhomobile.rhodes.ui.LogViewDialog;
36
35
  import com.rhomobile.rhodes.uri.MailUriHandler;
36
+ import com.rhomobile.rhodes.uri.SmsUriHandler;
37
37
  import com.rhomobile.rhodes.uri.TelUriHandler;
38
38
  import com.rhomobile.rhodes.uri.UriHandler;
39
39
  import com.rhomobile.rhodes.uri.VideoUriHandler;
@@ -41,6 +41,8 @@ import com.rhomobile.rhodes.uri.VideoUriHandler;
41
41
  import android.app.Activity;
42
42
  import android.content.Context;
43
43
  import android.content.pm.ActivityInfo;
44
+ import android.content.pm.ApplicationInfo;
45
+ import android.content.pm.PackageManager.NameNotFoundException;
44
46
  import android.content.res.Configuration;
45
47
  import android.graphics.Bitmap;
46
48
  import android.net.ConnectivityManager;
@@ -82,8 +84,7 @@ public class Rhodes extends Activity {
82
84
 
83
85
  private static int MAX_PROGRESS = 10000;
84
86
 
85
- private static final String INSTALLING_PAGE = "apps/app/installing.html";
86
- private static final String LOADING_PAGE = "apps/app/loading.html";
87
+ private static boolean ENABLE_LOADING_INDICATION = true;
87
88
 
88
89
  private long uiThreadId;
89
90
  public long getUiThreadId() {
@@ -149,11 +150,21 @@ public class Rhodes extends Activity {
149
150
  }
150
151
 
151
152
  private String phoneMemoryRootPath() {
152
- return "/data/data/" + getPackageName() + "/data/";
153
+ String pkgName = getPackageName();
154
+ try {
155
+ ApplicationInfo info = getPackageManager().getApplicationInfo(pkgName, 0);
156
+ String path = info.dataDir + "/rhodata/";
157
+ return path;
158
+ } catch (NameNotFoundException e) {
159
+ throw new RuntimeException("Internal error: package " + pkgName + " not found: " + e.getMessage());
160
+ }
153
161
  }
154
162
 
155
163
  private String sdcardRootPath() {
156
- return Environment.getExternalStorageDirectory() + "/rhomobile/" + getPackageName() + "/";
164
+ String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
165
+ String pkgName = getPackageName();
166
+ String path = sdPath + "/rhomobile/" + pkgName + "/";
167
+ return path;
157
168
  }
158
169
 
159
170
  private RhoLogConf m_rhoLogConf = new RhoLogConf();
@@ -204,7 +215,7 @@ public class Rhodes extends Activity {
204
215
  */
205
216
  }
206
217
 
207
- private boolean isNameChanged() {
218
+ public boolean isNameChanged() {
208
219
  try {
209
220
  FileSource as = new AssetsSource(getResources().getAssets());
210
221
  FileSource fs = new FileSource();
@@ -215,7 +226,7 @@ public class Rhodes extends Activity {
215
226
  }
216
227
  }
217
228
 
218
- private boolean isBundleChanged() {
229
+ public boolean isBundleChanged() {
219
230
  if (contentChanged == null) {
220
231
  try {
221
232
  String rp = getRootPath();
@@ -306,9 +317,9 @@ public class Rhodes extends Activity {
306
317
  w.setHorizontalScrollbarOverlay(true);
307
318
 
308
319
  w.setWebViewClient(new WebViewClient() {
309
-
310
- private boolean realPageLoaded = false;
311
320
 
321
+ private boolean splashHidden = false;
322
+
312
323
  @Override
313
324
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
314
325
  return handleUrlLoading(url);
@@ -316,25 +327,24 @@ public class Rhodes extends Activity {
316
327
 
317
328
  @Override
318
329
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
319
- getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 0);
330
+ if (ENABLE_LOADING_INDICATION)
331
+ getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 0);
320
332
  super.onPageStarted(view, url, favicon);
321
333
  }
322
334
 
323
335
  @Override
324
336
  public void onPageFinished(WebView view, String url) {
325
- // Clear page until we get real page loaded
326
- if (!(realPageLoaded || url.equals(LOADING_PAGE)))
327
- realPageLoaded = true;
328
- if (!realPageLoaded)
329
- view.clearHistory();
330
337
  // Set title
331
338
  Rhodes r = RhodesInstance.getInstance();
332
339
  String title = view.getTitle();
333
340
  r.setTitle(title);
334
341
  // Hide splash screen
335
- if (url.startsWith("http://"))
342
+ if (!splashHidden && url.startsWith("http://")) {
336
343
  hideSplashScreen();
337
- getWindow().setFeatureInt(Window.FEATURE_PROGRESS, MAX_PROGRESS);
344
+ splashHidden = true;
345
+ }
346
+ if (ENABLE_LOADING_INDICATION)
347
+ getWindow().setFeatureInt(Window.FEATURE_PROGRESS, MAX_PROGRESS);
338
348
  super.onPageFinished(view, url);
339
349
  }
340
350
 
@@ -343,12 +353,14 @@ public class Rhodes extends Activity {
343
353
  w.setWebChromeClient(new WebChromeClient() {
344
354
  @Override
345
355
  public void onProgressChanged(WebView view, int newProgress) {
346
- newProgress *= 100;
347
- if (newProgress < 0)
348
- newProgress = 0;
349
- if (newProgress > MAX_PROGRESS)
350
- newProgress = MAX_PROGRESS;
351
- getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress);
356
+ if (ENABLE_LOADING_INDICATION) {
357
+ newProgress *= 100;
358
+ if (newProgress < 0)
359
+ newProgress = 0;
360
+ if (newProgress > MAX_PROGRESS)
361
+ newProgress = MAX_PROGRESS;
362
+ getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress);
363
+ }
352
364
  super.onProgressChanged(view, newProgress);
353
365
  }
354
366
  });
@@ -420,8 +432,8 @@ public class Rhodes extends Activity {
420
432
  }
421
433
  }
422
434
 
423
- private void showSplashScreen(String file) throws IOException {
424
- splashScreen = new SplashScreen(this, file);
435
+ private void showSplashScreen() {
436
+ splashScreen = new SplashScreen(this);
425
437
  splashScreen.start(outerFrame);
426
438
  }
427
439
 
@@ -435,48 +447,6 @@ public class Rhodes extends Activity {
435
447
  view.requestFocus();
436
448
  }
437
449
 
438
- private void showLoadingPage() {
439
- try {
440
- boolean hasInstalling = false;
441
- try {
442
- getResources().getAssets().open("apps/app/installing.png").close();
443
- hasInstalling = true;
444
- }
445
- catch (IOException e) {}
446
- showSplashScreen("apps/app/" + (hasInstalling && isBundleChanged() ? "installing.png" : "loading.png"));
447
- }
448
- catch (Exception e) {
449
- MainView v = new SimpleMainView();
450
-
451
- boolean bc = isBundleChanged();
452
- String page = bc ? INSTALLING_PAGE : LOADING_PAGE;
453
-
454
- boolean hasNeededPage;
455
- try {
456
- getResources().getAssets().open(page).close();
457
- hasNeededPage = true;
458
- }
459
- catch (IOException e1) {
460
- hasNeededPage = false;
461
- }
462
-
463
- if (hasNeededPage) {
464
- v.navigate("file:///android_asset/" + page, 0);
465
- }
466
- else {
467
- StringBuffer p = new StringBuffer();
468
- p.append("<html><title>");
469
- p.append(bc ? "Installing" : "Loading");
470
- p.append("</title><body>");
471
- p.append(bc ? "Installing" : "Loading");
472
- p.append("...</body></html>");
473
- v.loadData(p.toString(), 0);
474
- }
475
-
476
- setMainView(v);
477
- }
478
- }
479
-
480
450
  /** Called when the activity is first created. */
481
451
  @Override
482
452
  public void onCreate(Bundle savedInstanceState) {
@@ -511,13 +481,15 @@ public class Rhodes extends Activity {
511
481
  this.setRequestedOrientation(disableScreenRotation ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
512
482
  ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
513
483
 
514
- this.requestWindowFeature(Window.FEATURE_PROGRESS);
484
+ ENABLE_LOADING_INDICATION = !RhoConf.getBool("disable_loading_indication");
485
+ if (ENABLE_LOADING_INDICATION)
486
+ this.requestWindowFeature(Window.FEATURE_PROGRESS);
515
487
 
516
488
  outerFrame = new FrameLayout(this);
517
489
  this.setContentView(outerFrame, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
518
490
 
519
491
  Logger.I("Rhodes", "Loading...");
520
- showLoadingPage();
492
+ showSplashScreen();
521
493
 
522
494
  // Increase WebView rendering priority
523
495
  WebView w = new WebView(this);
@@ -541,6 +513,7 @@ public class Rhodes extends Activity {
541
513
  // Register custom uri handlers here
542
514
  uriHandlers.addElement(new MailUriHandler(this));
543
515
  uriHandlers.addElement(new TelUriHandler(this));
516
+ uriHandlers.addElement(new SmsUriHandler(this));
544
517
  uriHandlers.addElement(new VideoUriHandler(this));
545
518
 
546
519
  Thread init = new Thread(new Runnable() {
@@ -7,23 +7,75 @@ import android.content.Context;
7
7
  import android.content.res.AssetManager;
8
8
  import android.graphics.Bitmap;
9
9
  import android.graphics.BitmapFactory;
10
+ import android.view.View;
10
11
  import android.view.ViewGroup;
12
+ import android.webkit.WebView;
11
13
  import android.widget.ImageView;
12
14
 
13
15
  public class SplashScreen {
14
16
 
15
- private ImageView view;
17
+ private static final String INSTALLING_PNG = "apps/app/installing.png";
18
+ private static final String LOADING_PNG = "apps/app/loading.png";
19
+
20
+ private static final String INSTALLING_PAGE = "apps/app/installing.html";
21
+ private static final String LOADING_PAGE = "apps/app/loading.html";
22
+
23
+ private View view;
16
24
 
17
25
  private native void nativeStart();
18
26
  private native void nativeHide();
19
27
 
20
- public SplashScreen(Context ctx, String file) throws IOException {
21
- view = new ImageView(ctx);
28
+ public SplashScreen(Context ctx) {
22
29
  AssetManager am = ctx.getResources().getAssets();
23
- InputStream is = am.open(file);
24
- Bitmap bitmap = BitmapFactory.decodeStream(is);
25
- view.setImageBitmap(bitmap);
26
- view.setId(Rhodes.RHO_SPLASH_VIEW);
30
+ Rhodes r = RhodesInstance.getInstance();
31
+ boolean bc = r.isBundleChanged();
32
+
33
+ String file = bc ? INSTALLING_PNG : LOADING_PNG;
34
+
35
+ Bitmap bitmap = null;
36
+ try {
37
+ InputStream is = am.open(file);
38
+ bitmap = BitmapFactory.decodeStream(is);
39
+ is.close();
40
+
41
+ ImageView v = new ImageView(ctx);
42
+ v.setImageBitmap(bitmap);
43
+ v.setId(Rhodes.RHO_SPLASH_VIEW);
44
+ view = v;
45
+ }
46
+ catch (IOException e) {
47
+ WebView v = r.createWebView();
48
+
49
+ String page = bc ? INSTALLING_PAGE : LOADING_PAGE;
50
+
51
+ boolean hasNeededPage;
52
+ try {
53
+ InputStream is1 = am.open(page);
54
+ if (is1 != null)
55
+ is1.close();
56
+ hasNeededPage = true;
57
+ }
58
+ catch (IOException e1) {
59
+ hasNeededPage = false;
60
+ }
61
+
62
+ if (hasNeededPage) {
63
+ v.loadUrl("file:///android_asset/" + page);
64
+ }
65
+ else {
66
+ StringBuffer p = new StringBuffer();
67
+ p.append("<html><title>");
68
+ p.append(bc ? "Installing" : "Loading");
69
+ p.append("</title><body>");
70
+ p.append(bc ? "Installing" : "Loading");
71
+ p.append("...</body></html>");
72
+ v.loadData(p.toString(), "text/html", "utf-8");
73
+ }
74
+
75
+ v.setId(Rhodes.RHO_SPLASH_VIEW);
76
+
77
+ view = v;
78
+ }
27
79
  }
28
80
 
29
81
  public void start(ViewGroup outer) {
@@ -35,7 +35,7 @@ public class Camera {
35
35
 
36
36
  public static final String INTENT_EXTRA_PREFIX = Rhodes.INTENT_EXTRA_PREFIX + "camera.";
37
37
 
38
- public static String BASE_CAMERA_DIR = RhodesInstance.getInstance().getRootPath() + "apps/public/db-files";
38
+ public static String BASE_CAMERA_DIR = RhodesInstance.getInstance().getRootPath() + "db/db-files";
39
39
 
40
40
  private static void reportFail(String name, Exception e) {
41
41
  Logger.E(TAG, "Call of \"" + name + "\" failed: " + e.getMessage());