rhodes 1.5.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/CHANGELOG +4 -0
  2. data/Manifest.txt +4 -3
  3. data/bin/upgrade-rhodes-app +1 -0
  4. data/lib/framework/rhodes.rb +2 -2
  5. data/lib/framework/rhom/rhom_object_factory.rb +16 -7
  6. data/lib/framework/version.rb +2 -2
  7. data/lib/rhodes.rb +2 -2
  8. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  9. data/platform/android/Rhodes/jni/include/jni/com_rhomobile_rhodes_Rhodes.h +14 -4
  10. data/platform/android/Rhodes/jni/src/rhodes.cpp +7 -0
  11. data/platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java +7 -2
  12. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +6 -6
  13. data/platform/android/Rhodes/src/com/rhomobile/rhodes/{MainView.java → mainview/MainView.java} +1 -1
  14. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +286 -0
  15. data/platform/android/Rhodes/src/com/rhomobile/rhodes/{TabbedMainView.java → mainview/TabbedMainView.java} +5 -1
  16. data/platform/android/build/RhodesSRC_build.files +3 -3
  17. data/platform/android/build/android.rake +1 -0
  18. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +22 -4
  19. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +1 -1
  20. data/platform/bb/rhodes/src/rhomobile/camera/CameraScreen.java +15 -3
  21. data/platform/iphone/Classes/WebViewController.m +21 -7
  22. data/platform/iphone/Info.plist +1 -1
  23. data/platform/iphone/rbuild/iphone.rake +36 -28
  24. data/platform/osx/Rhodes Launcher/launch.rb +21 -14
  25. data/platform/shared/common/RhodesApp.cpp +7 -0
  26. data/platform/shared/common/RhodesApp.h +1 -0
  27. data/platform/shared/ruby/wince/io_wce.c +2 -0
  28. data/platform/shared/rubyJVM/src/com/rho/RhoRuby.java +2 -1
  29. data/platform/shared/rubyJVM/src/com/rho/sync/SyncEngine.java +3 -3
  30. data/platform/shared/sync/SyncEngine.cpp +6 -5
  31. data/res/build-tools/cygwin1.dll +0 -0
  32. data/res/build-tools/cygz.dll +0 -0
  33. data/spec/framework_spec/app/spec/rhom_object_spec.rb +54 -75
  34. metadata +6 -5
  35. data/platform/android/Rhodes/src/com/rhomobile/rhodes/SimpleMainView.java +0 -67
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 1.5.3
2
+ * Fix issue #2980590 - iphone: call NetRequest from toolbar
3
+ * Fix issue #3104338 - rake run:iphone doesn't install into iphone sdk 3.2
4
+
1
5
  == 1.5.2
2
6
  * Fix AsyncHttp 'cancel request'
3
7
  * Implement #2948610 - enable AysyncHttp synchronous call
data/Manifest.txt CHANGED
@@ -292,7 +292,9 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java
292
292
  platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java
293
293
  platform/android/Rhodes/src/com/rhomobile/rhodes/HttpLog.java
294
294
  platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
295
- platform/android/Rhodes/src/com/rhomobile/rhodes/MainView.java
295
+ platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/MainView.java
296
+ platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java
297
+ platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java
296
298
  platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java
297
299
  platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java
298
300
  platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java
@@ -307,13 +309,11 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java
307
309
  platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java
308
310
  platform/android/Rhodes/src/com/rhomobile/rhodes/RhoLogConf.java
309
311
  platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java
310
- platform/android/Rhodes/src/com/rhomobile/rhodes/SimpleMainView.java
311
312
  platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSockAddr.java
312
313
  platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocket.java
313
314
  platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocketImpl.java
314
315
  platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java
315
316
  platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java
316
- platform/android/Rhodes/src/com/rhomobile/rhodes/TabbedMainView.java
317
317
  platform/android/Rhodes/src/com/rhomobile/rhodes/ui/AboutDialog.java
318
318
  platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogOptionsDialog.java
319
319
  platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogViewDialog.java
@@ -3263,6 +3263,7 @@ rakefile.rb
3263
3263
  README.textile
3264
3264
  res/build-tools/build_inf.js
3265
3265
  res/build-tools/cygwin1.dll
3266
+ res/build-tools/cygz.dll
3266
3267
  res/build-tools/db/syncdb.schema
3267
3268
  res/build-tools/db/syncdb.triggers
3268
3269
  res/build-tools/insertRhoBundle2pkg.rb
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
3
  require 'fileutils'
4
+ require 'yaml'
4
5
  include FileUtils
5
6
  puts File.dirname(__FILE__)
6
7
 
@@ -1,9 +1,9 @@
1
1
  module Rhodes
2
2
  unless defined? Rhodes::VERSION
3
- VERSION = '1.5.2'
3
+ VERSION = '1.5.3'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
- DBVERSION = '1.5.2'
6
+ DBVERSION = '1.5.3'
7
7
  end
8
8
 
9
9
  end
@@ -62,6 +62,10 @@ module Rhom
62
62
  end
63
63
  end
64
64
 
65
+ def to_s
66
+ @vars.to_s if @vars
67
+ end
68
+
65
69
  def method_missing(name, *args)
66
70
  unless name == Fixnum
67
71
  varname = name.to_s.gsub(/\=/,"")
@@ -507,7 +511,7 @@ module Rhom
507
511
  #new_obj.vars.merge!(rowhash)
508
512
 
509
513
  rowhash.each do |attrName, attrVal|
510
- new_obj.vars.merge!( { attrName.to_sym()=>attrVal } )
514
+ new_obj.vars.merge!( { attrName.to_sym()=>attrVal } ) if attrVal
511
515
  end
512
516
 
513
517
  ret_list << new_obj
@@ -529,10 +533,6 @@ module Rhom
529
533
  }
530
534
  end
531
535
 
532
- if order_attr && limit
533
- ret_list = ret_list.slice(offset,limit)
534
- end
535
-
536
536
  return list.length if args.first == :count
537
537
  if args.first == :first || args.first.is_a?(String)
538
538
  return ret_list.length > 0 ? ret_list[0] : nil
@@ -733,8 +733,17 @@ module Rhom
733
733
  ::Rhom::RhomDbAdapter.start_transaction
734
734
 
735
735
  result = ::Rhom::RhomDbAdapter.execute_sql("SELECT object FROM object_values WHERE object=? AND source_id=? LIMIT 1 OFFSET 0",obj,nSrcID)
736
- bUpdate = result && result.length > 0
737
- update_type = bUpdate ? self.get_update_type_by_source('update') : self.get_update_type_by_source('create')
736
+ if result && result.length > 0
737
+ resUpdateType = ::Rhom::RhomDbAdapter.select_from_table('changed_values', 'update_type', {"object"=>obj, "source_id"=>nSrcID, 'sent'=>0})
738
+ if resUpdateType && resUpdateType.length > 0
739
+ update_type = resUpdateType[0]['update_type']
740
+ else
741
+ update_type = self.get_update_type_by_source('update')
742
+ end
743
+ else
744
+ update_type = self.get_update_type_by_source('create')
745
+ end
746
+
738
747
  self.vars.each do |key_a,value|
739
748
  key = key_a.to_s
740
749
  next if ::Rhom::RhomObject.method_name_reserved?(key)
@@ -1,8 +1,8 @@
1
1
  module RhodesFramework
2
2
  unless defined? RhodesFramework::VERSION
3
- VERSION = '1.5.2'
3
+ VERSION = '1.5.3'
4
4
  end
5
5
  unless defined? RhodesFramework::DBVERSION
6
- DBVERSION = '1.5.2'
6
+ DBVERSION = '1.5.3'
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 = '1.5.2'
3
+ VERSION = '1.5.3'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
- DBVERSION = '1.5.2'
6
+ DBVERSION = '1.5.3'
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="21"
5
- android:versionName="1.5.2">
4
+ android:versionCode="22"
5
+ android:versionName="1.5.3">
6
6
  <uses-sdk android:minSdkVersion="3" />
7
7
  <application android:icon="@drawable/icon"
8
8
  android:multiprocess="true"
@@ -7,10 +7,12 @@
7
7
  #ifdef __cplusplus
8
8
  extern "C" {
9
9
  #endif
10
- #undef com_rhomobile_rhodes_Rhodes_WINDOW_FLAGS
11
- #define com_rhomobile_rhodes_Rhodes_WINDOW_FLAGS 1024L
12
- #undef com_rhomobile_rhodes_Rhodes_WINDOW_MASK
13
- #define com_rhomobile_rhodes_Rhodes_WINDOW_MASK 1024L
10
+ #undef com_rhomobile_rhodes_Rhodes_RHO_SPLASH_VIEW
11
+ #define com_rhomobile_rhodes_Rhodes_RHO_SPLASH_VIEW 1L
12
+ #undef com_rhomobile_rhodes_Rhodes_RHO_MAIN_VIEW
13
+ #define com_rhomobile_rhodes_Rhodes_RHO_MAIN_VIEW 2L
14
+ #undef com_rhomobile_rhodes_Rhodes_RHO_TOOLBAR_VIEW
15
+ #define com_rhomobile_rhodes_Rhodes_RHO_TOOLBAR_VIEW 3L
14
16
  /*
15
17
  * Class: com_rhomobile_rhodes_Rhodes
16
18
  * Method: createRhodesApp
@@ -83,6 +85,14 @@ JNIEXPORT jstring JNICALL Java_com_rhomobile_rhodes_Rhodes_getAppBackUrl
83
85
  JNIEXPORT jstring JNICALL Java_com_rhomobile_rhodes_Rhodes_normalizeUrl
84
86
  (JNIEnv *, jobject, jstring);
85
87
 
88
+ /*
89
+ * Class: com_rhomobile_rhodes_Rhodes
90
+ * Method: doRequest
91
+ * Signature: (Ljava/lang/String;)V
92
+ */
93
+ JNIEXPORT void JNICALL Java_com_rhomobile_rhodes_Rhodes_doRequest
94
+ (JNIEnv *, jobject, jstring);
95
+
86
96
  /*
87
97
  * Class: com_rhomobile_rhodes_Rhodes
88
98
  * Method: makeLink
@@ -354,6 +354,13 @@ RHO_GLOBAL jstring JNICALL Java_com_rhomobile_rhodes_Rhodes_getAppBackUrl
354
354
  return rho_cast<jstring>(s);
355
355
  }
356
356
 
357
+ RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_Rhodes_doRequest
358
+ (JNIEnv *env, jobject, jstring strUrl)
359
+ {
360
+ std::string const &url = rho_cast<std::string>(strUrl);
361
+ rho_net_request(url.c_str());
362
+ }
363
+
357
364
  RHO_GLOBAL jstring JNICALL Java_com_rhomobile_rhodes_Rhodes_normalizeUrl
358
365
  (JNIEnv *, jobject, jstring strUrl)
359
366
  {
@@ -22,6 +22,10 @@ package com.rhomobile.rhodes;
22
22
 
23
23
  import java.util.Vector;
24
24
 
25
+ import com.rhomobile.rhodes.mainview.MainView;
26
+ import com.rhomobile.rhodes.mainview.SimpleMainView;
27
+ import com.rhomobile.rhodes.mainview.TabbedMainView;
28
+
25
29
  public class NativeBar {
26
30
 
27
31
  private static final String TAG = "NativeBar";
@@ -46,10 +50,11 @@ public class NativeBar {
46
50
 
47
51
  switch (type) {
48
52
  case NOBAR_TYPE:
49
- case TOOLBAR_TYPE:
50
- // There is no toolbar on android so TOOLBAR_TYPE means exactly NOBAR_TYPE
51
53
  v = new SimpleMainView();
52
54
  break;
55
+ case TOOLBAR_TYPE:
56
+ v = new SimpleMainView(params);
57
+ break;
53
58
  case TABBAR_TYPE:
54
59
  v = new TabbedMainView(params);
55
60
  break;
@@ -27,6 +27,8 @@ import java.util.Locale;
27
27
 
28
28
  import com.rhomobile.rhodes.Utils.AssetsSource;
29
29
  import com.rhomobile.rhodes.Utils.FileSource;
30
+ import com.rhomobile.rhodes.mainview.MainView;
31
+ import com.rhomobile.rhodes.mainview.SimpleMainView;
30
32
  import com.rhomobile.rhodes.ui.AboutDialog;
31
33
  import com.rhomobile.rhodes.ui.LogOptionsDialog;
32
34
  import com.rhomobile.rhodes.ui.LogViewDialog;
@@ -71,6 +73,7 @@ public class Rhodes extends Activity {
71
73
 
72
74
  public static final int RHO_SPLASH_VIEW = 1;
73
75
  public static final int RHO_MAIN_VIEW = 2;
76
+ public static final int RHO_TOOLBAR_VIEW = 3;
74
77
 
75
78
  public static int WINDOW_FLAGS = WindowManager.LayoutParams.FLAG_FULLSCREEN;
76
79
  public static int WINDOW_MASK = WindowManager.LayoutParams.FLAG_FULLSCREEN;
@@ -111,6 +114,8 @@ public class Rhodes extends Activity {
111
114
 
112
115
  public native String normalizeUrl(String url);
113
116
 
117
+ public native void doRequest(String url);
118
+
114
119
  public native static void makeLink(String src, String dst);
115
120
 
116
121
  private void initRootPath() {
@@ -539,12 +544,7 @@ public class Rhodes extends Activity {
539
544
  }
540
545
 
541
546
  private void goBack() {
542
- String backUrl = getAppBackUrl();
543
- int activeTab = mainView.activeTab();
544
- if (backUrl == null || backUrl.length() == 0)
545
- mainView.back(activeTab);
546
- else
547
- mainView.navigate(backUrl, activeTab);
547
+ mainView.back(mainView.activeTab());
548
548
  }
549
549
 
550
550
  private void goForward() {
@@ -18,7 +18,7 @@
18
18
  along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  ============================================================================
20
20
  */
21
- package com.rhomobile.rhodes;
21
+ package com.rhomobile.rhodes.mainview;
22
22
 
23
23
  import android.view.View;
24
24
 
@@ -0,0 +1,286 @@
1
+ /*
2
+ ============================================================================
3
+ Author : Dmitry Moskalchuk
4
+ Version : 1.5
5
+ Copyright : Copyright (C) 2008 Rhomobile. All rights reserved.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ ============================================================================
20
+ */
21
+ package com.rhomobile.rhodes.mainview;
22
+
23
+ import java.util.Map;
24
+ import java.util.Vector;
25
+
26
+ import com.rhomobile.rhodes.AndroidR;
27
+ import com.rhomobile.rhodes.Rhodes;
28
+ import com.rhomobile.rhodes.RhodesInstance;
29
+
30
+ import android.graphics.Bitmap;
31
+ import android.graphics.BitmapFactory;
32
+ import android.graphics.Color;
33
+ import android.graphics.drawable.BitmapDrawable;
34
+ import android.graphics.drawable.Drawable;
35
+ import android.view.Gravity;
36
+ import android.view.View;
37
+ import android.view.ViewGroup;
38
+ import android.webkit.WebView;
39
+ import android.widget.Button;
40
+ import android.widget.ImageButton;
41
+ import android.widget.LinearLayout;
42
+
43
+ public class SimpleMainView implements MainView {
44
+
45
+ private static final int WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT;
46
+ private static final int FILL_PARENT = ViewGroup.LayoutParams.FILL_PARENT;
47
+
48
+ private class ActionBack implements View.OnClickListener {
49
+ public void onClick(View v) {
50
+ back(0);
51
+ }
52
+ };
53
+
54
+ private class ActionForward implements View.OnClickListener {
55
+ public void onClick(View v) {
56
+ forward(0);
57
+ }
58
+ };
59
+
60
+ private class ActionHome implements View.OnClickListener {
61
+ public void onClick(View v) {
62
+ navigate(RhodesInstance.getInstance().getStartUrl(), 0);
63
+ }
64
+ };
65
+
66
+ private class ActionOptions implements View.OnClickListener {
67
+ public void onClick(View v) {
68
+ navigate(RhodesInstance.getInstance().getOptionsUrl(), 0);
69
+ }
70
+ };
71
+
72
+ private class ActionRefresh implements View.OnClickListener {
73
+ public void onClick(View v) {
74
+ reload(0);
75
+ }
76
+ };
77
+
78
+ private class ActionCustomRunnable implements Runnable {
79
+ private boolean callback;
80
+ private String url;
81
+ public ActionCustomRunnable(boolean c, String u) {
82
+ callback = c;
83
+ url = u;
84
+ }
85
+
86
+ public void run() {
87
+ if (callback)
88
+ RhodesInstance.getInstance().doRequest(url);
89
+ else
90
+ navigate(url, 0);
91
+ }
92
+ };
93
+
94
+ private class ActionCustom implements View.OnClickListener {
95
+ private static final String scheme = "callback:";
96
+ private String url;
97
+ private boolean callback;
98
+
99
+ public ActionCustom(String u) {
100
+ callback = false;
101
+ url = u;
102
+ if (url.startsWith(scheme)) {
103
+ url = url.substring(scheme.length());
104
+ callback = true;
105
+ }
106
+ url = RhodesInstance.getInstance().normalizeUrl(url);
107
+ }
108
+
109
+ public void onClick(View v) {
110
+ Rhodes.performOnUiThread(new ActionCustomRunnable(callback, url), false);
111
+ }
112
+ };
113
+
114
+ private LinearLayout view;
115
+ private WebView webView;
116
+
117
+ public View getView() {
118
+ return view;
119
+ }
120
+
121
+ @SuppressWarnings("unchecked")
122
+ private void init(Vector<Object> params) {
123
+ Rhodes r = RhodesInstance.getInstance();
124
+
125
+ view = new LinearLayout(r);
126
+ view.setOrientation(LinearLayout.VERTICAL);
127
+ view.setGravity(Gravity.BOTTOM);
128
+ view.setLayoutParams(new LinearLayout.LayoutParams(FILL_PARENT, FILL_PARENT));
129
+ view.setId(Rhodes.RHO_MAIN_VIEW);
130
+
131
+ webView = r.createWebView();
132
+ view.addView(webView, new LinearLayout.LayoutParams(FILL_PARENT, 0, 1));
133
+
134
+ LinearLayout bottom = new LinearLayout(r);
135
+ bottom.setOrientation(LinearLayout.HORIZONTAL);
136
+ bottom.setBackgroundColor(Color.GRAY);
137
+ bottom.setLayoutParams(new LinearLayout.LayoutParams(FILL_PARENT, WRAP_CONTENT, 0));
138
+ view.addView(bottom);
139
+
140
+ if (params != null) {
141
+ LinearLayout left = new LinearLayout(r);
142
+ left.setGravity(Gravity.LEFT);
143
+ left.setOrientation(LinearLayout.HORIZONTAL);
144
+ left.setLayoutParams(new LinearLayout.LayoutParams(FILL_PARENT, FILL_PARENT, 1));
145
+ bottom.addView(left);
146
+
147
+ LinearLayout right = new LinearLayout(r);
148
+ right.setGravity(Gravity.RIGHT);
149
+ right.setOrientation(LinearLayout.HORIZONTAL);
150
+ right.setLayoutParams(new LinearLayout.LayoutParams(FILL_PARENT, FILL_PARENT, 1));
151
+ bottom.addView(right);
152
+
153
+ LinearLayout current = left;
154
+
155
+ String rootPath = r.getRootPath() + "/apps/";
156
+
157
+ for (int i = 0, lim = params.size(); i < lim; ++i) {
158
+ Object param = params.elementAt(i);
159
+ if (!(param instanceof Map<?,?>))
160
+ throw new IllegalArgumentException("Hash expected");
161
+
162
+ Map<Object, Object> hash = (Map<Object, Object>)param;
163
+
164
+ Object actionObj = hash.get("action");
165
+ if (actionObj == null || !(actionObj instanceof String))
166
+ throw new IllegalArgumentException("'action' should be String");
167
+
168
+ String action = (String)actionObj;
169
+ if (action.length() == 0)
170
+ throw new IllegalArgumentException("'action' should not be empty");
171
+
172
+ Drawable icon = null;
173
+ String label = null;
174
+
175
+ View.OnClickListener onClick = null;
176
+ if (action.equalsIgnoreCase("back")) {
177
+ icon = r.getResources().getDrawable(AndroidR.drawable.back);
178
+ onClick = new ActionBack();
179
+ }
180
+ else if (action.equalsIgnoreCase("forward")) {
181
+ icon = r.getResources().getDrawable(AndroidR.drawable.next);
182
+ onClick = new ActionForward();
183
+ }
184
+ else if (action.equalsIgnoreCase("home")) {
185
+ icon = r.getResources().getDrawable(AndroidR.drawable.home);
186
+ onClick = new ActionHome();
187
+ }
188
+ else if (action.equalsIgnoreCase("options")) {
189
+ icon = r.getResources().getDrawable(AndroidR.drawable.options);
190
+ onClick = new ActionOptions();
191
+ }
192
+ else if (action.equalsIgnoreCase("refresh")) {
193
+ icon = r.getResources().getDrawable(AndroidR.drawable.refresh);
194
+ onClick = new ActionRefresh();
195
+ }
196
+ else if (action.equalsIgnoreCase("separator")) {
197
+ current = right;
198
+ continue;
199
+ }
200
+
201
+ Object iconObj = hash.get("icon");
202
+ if (iconObj != null) {
203
+ if (!(iconObj instanceof String))
204
+ throw new IllegalArgumentException("'icon' should be String");
205
+ String iconPath = rootPath + (String)iconObj;
206
+ Bitmap bitmap = BitmapFactory.decodeFile(iconPath);
207
+ if (bitmap != null)
208
+ icon = new BitmapDrawable(bitmap);
209
+ }
210
+
211
+ if (icon == null) {
212
+ Object labelObj = hash.get("label");
213
+ if (labelObj == null || !(labelObj instanceof String))
214
+ throw new IllegalArgumentException("'label' should be String");
215
+ label = (String)labelObj;
216
+ }
217
+
218
+ if (icon == null && label == null)
219
+ throw new IllegalArgumentException("One of 'icon' or 'label' should be specified");
220
+
221
+ View button = null;
222
+ if (icon != null) {
223
+ ImageButton btn = new ImageButton(r);
224
+ btn.setImageDrawable(icon);
225
+ button = btn;
226
+ }
227
+ else {
228
+ Button btn = new Button(r);
229
+ btn.setText(label);
230
+ button = btn;
231
+ }
232
+
233
+ if (button == null)
234
+ continue;
235
+
236
+ if (onClick == null)
237
+ onClick = new ActionCustom(action);
238
+
239
+ button.setOnClickListener(onClick);
240
+ button.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
241
+ current.addView(button);
242
+ }
243
+ }
244
+ }
245
+
246
+ public SimpleMainView() {
247
+ init(null);
248
+ }
249
+
250
+ public SimpleMainView(Vector<Object> params) {
251
+ init(params);
252
+ }
253
+
254
+ public void back(int index) {
255
+ String backUrl = RhodesInstance.getInstance().getAppBackUrl();
256
+ if (backUrl == null || backUrl.length() == 0)
257
+ webView.goBack();
258
+ else
259
+ navigate(backUrl, index);
260
+ }
261
+
262
+ public void forward(int index) {
263
+ webView.goForward();
264
+ }
265
+
266
+ public void navigate(String url, int index) {
267
+ webView.loadUrl(url);
268
+ }
269
+
270
+ public void reload(int index) {
271
+ webView.reload();
272
+ }
273
+
274
+ public String currentLocation(int index) {
275
+ return webView.getUrl();
276
+ }
277
+
278
+ public void switchTab(int index) {
279
+ // Nothing
280
+ }
281
+
282
+ public int activeTab() {
283
+ return 0;
284
+ }
285
+
286
+ }