ruboto 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +0 -2
  3. data/Rakefile +64 -1
  4. data/assets/rakelib/ruboto.rake +23 -2
  5. data/assets/res/layout/get_ruboto_core.xml +0 -2
  6. data/assets/samples/sample_activity.rb +3 -6
  7. data/assets/samples/sample_broadcast_receiver.rb +9 -5
  8. data/assets/samples/sample_service.rb +0 -3
  9. data/assets/src/InheritingActivity.java +1 -1
  10. data/assets/src/InheritingClass.java +10 -4
  11. data/assets/src/RubotoActivity.java +90 -20
  12. data/assets/src/RubotoBroadcastReceiver.java +59 -23
  13. data/assets/src/RubotoService.java +103 -51
  14. data/assets/src/org/ruboto/EntryPointActivity.java +2 -1
  15. data/assets/src/org/ruboto/JRubyAdapter.java +158 -115
  16. data/assets/src/org/ruboto/Script.java +23 -1
  17. data/assets/src/org/ruboto/test/ActivityTest.java +2 -2
  18. data/assets/src/org/ruboto/test/InstrumentationTestRunner.java +30 -16
  19. data/assets/src/ruboto.rb +1 -0
  20. data/assets/src/ruboto/activity.rb +2 -6
  21. data/assets/src/ruboto/base.rb +9 -7
  22. data/assets/src/ruboto/broadcast_receiver.rb +0 -8
  23. data/assets/src/ruboto/generate.rb +2 -2
  24. data/assets/src/ruboto/service.rb +0 -8
  25. data/assets/src/ruboto/widget.rb +17 -2
  26. data/lib/java_class_gen/android_api.xml +1 -1
  27. data/lib/ruboto/sdk_versions.rb +1 -1
  28. data/lib/ruboto/util/build.rb +11 -10
  29. data/lib/ruboto/util/code_formatting.rb +2 -2
  30. data/lib/ruboto/util/update.rb +20 -7
  31. data/lib/ruboto/util/xml_element.rb +42 -16
  32. data/lib/ruboto/version.rb +1 -1
  33. data/test/activity/call_super_activity.rb +28 -0
  34. data/test/activity/call_super_activity_test.rb +15 -0
  35. data/test/activity/image_button_activity.rb +2 -3
  36. data/test/activity/image_button_and_button_activity.rb +1 -2
  37. data/test/activity/margins_activity.rb +17 -0
  38. data/test/activity/margins_activity_test.rb +25 -0
  39. data/test/activity/navigation_activity.rb +85 -0
  40. data/test/activity/navigation_activity_test.rb +98 -0
  41. data/test/activity/option_menu_activity.rb +0 -2
  42. data/test/activity/psych_activity.rb +2 -3
  43. data/test/activity/stack_activity.rb +3 -2
  44. data/test/activity/stack_activity_test.rb +9 -7
  45. data/test/block_def_activity/margins_activity.rb +17 -0
  46. data/test/block_def_activity/margins_activity_test.rb +25 -0
  47. data/test/block_def_activity/option_menu_activity_test.rb +1 -2
  48. data/test/block_def_activity/stack_activity_test.rb +8 -5
  49. data/test/broadcast_receiver_test.rb +2 -2
  50. data/test/gem_test.rb +12 -0
  51. data/test/handle_activity/margins_activity.rb +15 -0
  52. data/test/handle_activity/margins_activity_test.rb +25 -0
  53. data/test/handle_activity/option_menu_activity.rb +4 -0
  54. data/test/handle_activity/stack_activity.rb +3 -0
  55. data/test/handle_activity/stack_activity_test.rb +9 -6
  56. data/test/minimal_app_test.rb +1 -1
  57. data/test/rake_test.rb +6 -7
  58. data/test/ruboto_gen_test.rb +54 -4
  59. data/test/ruboto_update_test.rb +12 -8
  60. data/test/service_test.rb +1 -6
  61. data/test/test_helper.rb +34 -11
  62. data/test/update_test_methods.rb +22 -0
  63. data/test/view_constants_test.rb +104 -0
  64. metadata +17 -5
data/Gemfile CHANGED
@@ -2,4 +2,4 @@ source :rubygems
2
2
 
3
3
  gem 'rake'
4
4
  gem 'main'
5
- gem 'jruby-jars'
5
+ # gem 'jruby-jars'
data/Gemfile.lock CHANGED
@@ -4,7 +4,6 @@ GEM
4
4
  arrayfields (4.7.4)
5
5
  chronic (0.6.7)
6
6
  fattr (2.2.1)
7
- jruby-jars (1.6.7)
8
7
  main (5.0.1)
9
8
  arrayfields (>= 4.7.4)
10
9
  chronic (>= 0.6.2)
@@ -18,6 +17,5 @@ PLATFORMS
18
17
  ruby
19
18
 
20
19
  DEPENDENCIES
21
- jruby-jars
22
20
  main
23
21
  rake
data/Rakefile CHANGED
@@ -31,6 +31,7 @@ end
31
31
  task :install => :gem do
32
32
  `gem query -i -n ^ruboto$ -v #{Ruboto::VERSION}`
33
33
  if $? != 0
34
+ puts 'Installing gem'
34
35
  cmd = "gem install ruboto-#{Ruboto::VERSION}.gem"
35
36
  output = `#{cmd}`
36
37
  if $? == 0
@@ -43,6 +44,24 @@ task :install => :gem do
43
44
  end
44
45
  end
45
46
 
47
+ task :uninstall do
48
+ `gem query -i -n ^ruboto$ -v #{Ruboto::VERSION}`
49
+ if $? == 0
50
+ puts 'Uninstalling gem'
51
+ cmd = "gem uninstall ruboto -v #{Ruboto::VERSION}"
52
+ output = `#{cmd}`
53
+ if $? == 0
54
+ puts output
55
+ else
56
+ sh "sudo #{cmd}"
57
+ end
58
+ else
59
+ puts "ruboto-#{Ruboto::VERSION} is not installed."
60
+ end
61
+ end
62
+
63
+ task :reinstall => [:uninstall, :clean, :install]
64
+
46
65
  desc "Generate an example app"
47
66
  task :example => EXAMPLE_FILE
48
67
 
@@ -57,6 +76,49 @@ file EXAMPLE_FILE => :install do
57
76
  end
58
77
  end
59
78
 
79
+ desc 'Generate release docs for a given milestone'
80
+ task :release_docs do
81
+ # require 'rubygems'
82
+ # require 'highline/import'
83
+ print 'user name: ' ; user = STDIN.gets.chomp # ask('login : ') { |q| q.echo = true }
84
+ print 'password : ' ; pass = STDIN.gets.chomp # ask('password: ') { |q| q.echo = '*' }
85
+ print 'milestone: ' ; milestone = STDIN.gets.chomp # ask('milestone: ', Integer) { |q| q.echo = true }
86
+ require 'uri'
87
+ require 'net/http'
88
+ require 'net/https'
89
+ require 'openssl'
90
+ require 'yaml'
91
+ uri = URI(%Q{https://api.github.com/repos/ruboto/ruboto/issues?milestone=#{milestone}&state=closed&per_page=1000})
92
+ https = Net::HTTP.new(uri.host, uri.port)
93
+ https.use_ssl = true
94
+ https.verify_mode = OpenSSL::SSL::VERIFY_NONE
95
+ req = Net::HTTP::Get.new(uri.request_uri)
96
+ req.basic_auth(user, pass)
97
+ res = https.start { |http| http.request(req) }
98
+ issues = YAML.load(res.body).sort_by { |i| i['number'] }
99
+ milestone_name = issues[0] ? issues[0]['milestone']['title'] : "No issues for milestone #{milestone}"
100
+ categories = {'Features' => 'feature', 'Bugfixes' => 'bug', 'Internal' => 'internal', 'Support' => 'support', 'Documentation' => 'documentation', 'Other' => nil}
101
+ grouped_issues = issues.group_by do |i|
102
+ labels = i['labels'].map { |l| l['name']}
103
+ cat = nil
104
+ categories.each do |k,v|
105
+ if labels.include? v
106
+ cat = k
107
+ break
108
+ end
109
+ end
110
+ cat || 'Other'
111
+ end
112
+ puts "\nNew in version #{milestone_name}:\n\n"
113
+ (categories.keys & grouped_issues.keys).each do |cat|
114
+ puts "#{cat}:\n\n"
115
+ grouped_issues[cat].each { |i| puts %Q{* Issue ##{i['number']} #{i['title']}} }
116
+ puts
117
+ end
118
+ puts "You can find a complete list of issues here:\n\n"
119
+ puts "* https://github.com/ruboto/ruboto/issues?state=closed&milestone=#{milestone}\n\n"
120
+ end
121
+
60
122
  desc "Push the gem to RubyGems"
61
123
  task :release => [:clean, :gem] do
62
124
  output = `git status --porcelain`
@@ -67,6 +129,7 @@ task :release => [:clean, :gem] do
67
129
 
68
130
  Rake::Task[:example].invoke
69
131
  sh "git add #{EXAMPLE_FILE}"
132
+ sh "git rm #{EXAMPLE_FILE.slice(/^\d+\.\d+\.\d+/)}.*"
70
133
  sh "git commit -m '* Added example app for Ruboto #{Ruboto::VERSION} tools r#{Ruboto::SdkVersions::ANDROID_TOOLS_REVISION}' #{EXAMPLE_FILE}"
71
134
  sh "git push"
72
135
  end
@@ -74,7 +137,7 @@ end
74
137
  desc "Run the tests"
75
138
  task :test do
76
139
  FileUtils.rm_rf Dir['tmp/RubotoTestApp_template*']
77
- Dir['test/*_test.rb'].each do |f|
140
+ Dir['./test/*_test.rb'].each do |f|
78
141
  require f.chomp('.rb')
79
142
  end
80
143
  end
@@ -207,7 +207,12 @@ file BUNDLE_JAR => [GEM_FILE, GEM_LOCK_FILE] do
207
207
 
208
208
  FileUtils.mkdir_p BUNDLE_PATH
209
209
  sh "bundle install --gemfile #{GEM_FILE} --path=#{BUNDLE_PATH}"
210
- gem_path = Dir["#{BUNDLE_PATH}/*ruby/1.8/gems"][0]
210
+
211
+ gem_paths = Dir["#{BUNDLE_PATH}/{{,j}ruby,rbx}/{1.8,1.9{,.1},shared}/gems"]
212
+ raise "Gem path not found" if gem_paths.empty?
213
+ raise "Found multiple gem paths: #{gem_paths}" if gem_paths.size > 1
214
+ gem_path = gem_paths[0]
215
+ puts "Found gems in #{gem_path}"
211
216
 
212
217
  if package != 'org.ruboto.core' && JRUBY_JARS.none? { |f| File.exists? f }
213
218
  Dir.chdir gem_path do
@@ -350,6 +355,17 @@ def package_installed? test = false
350
355
  return false
351
356
  end
352
357
  end
358
+
359
+ sdcard_path = "/mnt/asec/#{package_name}#{i}/pkg.apk"
360
+ o = `adb shell ls -l #{sdcard_path}`.chomp
361
+ if o =~ /^-r-xr-xr-x system\s+root\s+(\d+) \d{4}-\d{2}-\d{2} \d{2}:\d{2} #{File.basename(sdcard_path)}$/
362
+ apk_file = test ? TEST_APK_FILE : APK_FILE
363
+ if !File.exists?(apk_file) || $1.to_i == File.size(apk_file)
364
+ return true
365
+ else
366
+ return false
367
+ end
368
+ end
353
369
  end
354
370
  return nil
355
371
  end
@@ -397,7 +413,10 @@ def install_apk
397
413
  when false
398
414
  puts "Package #{package} already installed, but of different size. Replacing package."
399
415
  output = `adb install -r #{APK_FILE} 2>&1`
400
- return if $? == 0 && output !~ failure_pattern && output =~ success_pattern
416
+ if $? == 0 && output !~ failure_pattern && output =~ success_pattern
417
+ clear_update
418
+ return
419
+ end
401
420
  case $1
402
421
  when 'INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES'
403
422
  puts "Found package signed with different certificate. Uninstalling it and retrying install."
@@ -407,7 +426,9 @@ def install_apk
407
426
  end
408
427
  uninstall_apk
409
428
  end
429
+ puts "Installing package #{package}"
410
430
  output = `adb install #{APK_FILE} 2>&1`
431
+ puts output
411
432
  raise "Install failed (#{$?}) #{$1 ? "[#$1}]" : output}" if $? != 0 || output =~ failure_pattern || output !~ success_pattern
412
433
  clear_update
413
434
  end
@@ -6,8 +6,6 @@
6
6
  android:orientation="vertical"
7
7
  android:gravity="center_horizontal|center_vertical"
8
8
  >
9
- <!--
10
- -->
11
9
  <ImageButton
12
10
  android:id="@+id/image"
13
11
  android:layout_width="fill_parent"
@@ -1,4 +1,3 @@
1
- require 'ruboto/activity'
2
1
  require 'ruboto/widget'
3
2
  require 'ruboto/util/toast'
4
3
 
@@ -7,16 +6,14 @@ ruboto_import_widgets :Button, :LinearLayout, :TextView
7
6
  # http://xkcd.com/378/
8
7
 
9
8
  class SampleActivity
10
- include Ruboto::Activity
11
-
12
9
  def on_create(bundle)
13
10
  set_title 'Domo arigato, Mr Ruboto!'
14
11
 
15
12
  self.content_view =
16
13
  linear_layout :orientation => :vertical do
17
- @text_view = text_view :text => 'What hath Matz wrought?', :id => 42, :width => :fill_parent,
18
- :gravity => android.view.Gravity::CENTER, :text_size => 48.0
19
- button :text => 'M-x butterfly', :width => :fill_parent, :id => 43, :on_click_listener => proc { butterfly }
14
+ @text_view = text_view :text => 'What hath Matz wrought?', :id => 42, :width => :match_parent,
15
+ :gravity => :center, :text_size => 48.0
16
+ button :text => 'M-x butterfly', :width => :match_parent, :id => 43, :on_click_listener => proc { butterfly }
20
17
  end
21
18
  rescue
22
19
  puts "Exception creating activity: #{$!}"
@@ -1,15 +1,19 @@
1
- require 'ruboto/broadcast_receiver'
2
-
3
1
  import android.util.Log
4
2
 
5
3
  class SampleBroadcastReceiver
6
- include Ruboto::BroadcastReceiver
7
-
8
4
  # will get called whenever the BroadcastReceiver receives an intent (whenever onReceive is called)
9
5
  def on_receive(context, intent)
10
6
  Log.v "SampleBroadcastReceiver", 'Broadcast received!'
11
7
  Log.v "SampleBroadcastReceiver", intent.getExtras.to_s
12
- context.run_on_ui_thread{$activity.title = 'Broadcast received!'}
8
+ context.run_on_ui_thread do
9
+ begin
10
+ $activity.title = 'Broadcast received!'
11
+ rescue Exception
12
+ Log.e "Exception setting title: #{$!.message}\n#{$!.backtrace.join("\n")}"
13
+ end
14
+ end
13
15
  Log.v "SampleBroadcastReceiver", 'Broadcast processed OK!'
16
+ rescue Exception
17
+ Log.e "Exception processing broadcast: #{$!.message}\n#{$!.backtrace.join("\n")}"
14
18
  end
15
19
  end
@@ -1,4 +1,3 @@
1
- require 'ruboto/service'
2
1
  require 'ruboto/util/toast'
3
2
 
4
3
  # Services are complicated and don't really make sense unless you
@@ -8,8 +7,6 @@ require 'ruboto/util/toast'
8
7
  # online:
9
8
  # http://developer.android.com/reference/android/app/Service.html
10
9
  class SampleService
11
- include Ruboto::Service
12
-
13
10
  def on_start_command(intent, flags, startId)
14
11
  toast "Hello from the service"
15
12
  android.app.Service::START_NOT_STICKY
@@ -4,7 +4,7 @@ import android.os.Bundle;
4
4
 
5
5
  public class InheritingActivity extends org.ruboto.EntryPointActivity {
6
6
  public void onCreate(Bundle bundle) {
7
- setScriptName("sample_activity.rb");
7
+ setRubyClassName(getClass().getSimpleName());
8
8
  super.onCreate(bundle);
9
9
  }
10
10
  }
@@ -1,18 +1,24 @@
1
+ // Generated Ruboto subclass with method base "THE_METHOD_BASE"
2
+
1
3
  package THE_PACKAGE;
2
4
 
3
5
  import org.ruboto.JRubyAdapter;
6
+ import org.ruboto.Log;
7
+ import org.ruboto.Script;
4
8
 
5
9
  public class THE_RUBOTO_CLASS THE_ACTION THE_ANDROID_CLASS {
6
-
7
10
  THE_CONSTANTS
8
11
 
12
+ private String rubyClassName = "THE_RUBOTO_CLASS";
13
+ private String scriptName = "THE_RUBOTO_CLASS";
14
+ private Object rubyInstance = this;
9
15
  private Object[] callbackProcs = new Object[CONSTANTS_COUNT];
10
16
 
11
17
  THE_CONSTRUCTORS
12
18
 
13
- public void setCallbackProc(int id, Object obj) {
14
- callbackProcs[id] = obj;
15
- }
19
+ public void setCallbackProc(int id, Object obj) {
20
+ callbackProcs[id] = obj;
21
+ }
16
22
 
17
23
  THE_METHODS
18
24
 
@@ -8,15 +8,15 @@ import android.app.ProgressDialog;
8
8
  import android.os.Bundle;
9
9
 
10
10
  public class THE_RUBOTO_CLASS THE_ACTION THE_ANDROID_CLASS {
11
+ THE_CONSTANTS
12
+
13
+ private String rubyClassName;
11
14
  private String scriptName;
15
+ private Object rubyInstance;
16
+ private Object[] callbackProcs = new Object[CONSTANTS_COUNT];
12
17
  private String remoteVariable = null;
13
18
  private Object[] args;
14
19
  private Bundle configBundle = null;
15
- private Object rubyInstance;
16
-
17
- THE_CONSTANTS
18
-
19
- private Object[] callbackProcs = new Object[CONSTANTS_COUNT];
20
20
 
21
21
  public void setCallbackProc(int id, Object obj) {
22
22
  callbackProcs[id] = obj;
@@ -31,6 +31,10 @@ THE_CONSTANTS
31
31
  return (remoteVariable == null ? "" : (remoteVariable + ".")) + call;
32
32
  }
33
33
 
34
+ public void setRubyClassName(String name) {
35
+ rubyClassName = name;
36
+ }
37
+
34
38
  public void setScriptName(String name) {
35
39
  scriptName = name;
36
40
  }
@@ -42,6 +46,7 @@ THE_CONSTANTS
42
46
 
43
47
  @Override
44
48
  public void onCreate(Bundle bundle) {
49
+ System.out.println("RubotoActivity onCreate(): " + getClass().getName());
45
50
  args = new Object[1];
46
51
  args[0] = bundle;
47
52
 
@@ -51,6 +56,13 @@ THE_CONSTANTS
51
56
  if (configBundle.containsKey("Theme")) {
52
57
  setTheme(configBundle.getInt("Theme"));
53
58
  }
59
+ if (configBundle.containsKey("ClassName")) {
60
+ if (this.getClass().getName() == RubotoActivity.class.getName()) {
61
+ setRubyClassName(configBundle.getString("ClassName"));
62
+ } else {
63
+ throw new IllegalArgumentException("Only local Intents may set class name.");
64
+ }
65
+ }
54
66
  if (configBundle.containsKey("Script")) {
55
67
  if (this.getClass().getName() == RubotoActivity.class.getName()) {
56
68
  setScriptName(configBundle.getString("Script"));
@@ -60,8 +72,15 @@ THE_CONSTANTS
60
72
  }
61
73
  }
62
74
 
75
+ if (rubyClassName == null && scriptName != null) {
76
+ rubyClassName = Script.toCamelCase(scriptName);
77
+ }
78
+ if (scriptName == null && rubyClassName != null) {
79
+ setScriptName(Script.toSnakeCase(rubyClassName) + ".rb");
80
+ }
81
+
63
82
  super.onCreate(bundle);
64
-
83
+
65
84
  if (JRubyAdapter.isInitialized()) {
66
85
  prepareJRuby();
67
86
  loadScript();
@@ -81,26 +100,77 @@ THE_CONSTANTS
81
100
  protected void loadScript() {
82
101
  try {
83
102
  if (scriptName != null) {
84
- String rubyClassName = Script.toCamelCase(scriptName);
85
103
  System.out.println("Looking for Ruby class: " + rubyClassName);
86
104
  Object rubyClass = JRubyAdapter.get(rubyClassName);
87
- if (rubyClass == null) {
88
- System.out.println("Loading script: " + scriptName);
89
- JRubyAdapter.exec(new Script(scriptName).getContents());
90
- rubyClass = JRubyAdapter.get(rubyClassName);
105
+ Script rubyScript = new Script(scriptName);
106
+ if (rubyScript.exists()) {
107
+ String script = rubyScript.getContents();
108
+ if (script.matches("(?s).*class " + rubyClassName + ".*")) {
109
+ if (!rubyClassName.equals(getClass().getSimpleName())) {
110
+ System.out.println("Script defines methods on meta class");
111
+ // FIXME(uwe): Simplify when we stop support for RubotoCore 0.4.7
112
+ if (JRubyAdapter.isJRubyPreOneSeven() || JRubyAdapter.isRubyOneEight()) {
113
+ JRubyAdapter.put("$java_instance", this);
114
+ JRubyAdapter.put(rubyClassName, JRubyAdapter.runScriptlet("class << $java_instance; self; end"));
115
+ } else if (JRubyAdapter.isJRubyOneSeven() && JRubyAdapter.isRubyOneNine()) {
116
+ JRubyAdapter.runScriptlet("Java::" + getClass().getName() + ".__persistent__ = true");
117
+ JRubyAdapter.put(rubyClassName, JRubyAdapter.runRubyMethod(this, "singleton_class"));
118
+ } else {
119
+ throw new RuntimeException("Unknown JRuby/Ruby version: " + JRubyAdapter.get("JRUBY_VERSION") + "/" + JRubyAdapter.get("RUBY_VERSION"));
120
+ }
121
+ }
122
+ }
123
+ if (rubyClass == null) {
124
+ System.out.println("Loading script: " + scriptName);
125
+ if (script.matches("(?s).*class " + rubyClassName + ".*")) {
126
+ System.out.println("Script contains class definition");
127
+ if (rubyClassName.equals(getClass().getSimpleName())) {
128
+ System.out.println("Script has separate Java class");
129
+ // FIXME(uwe): Simplify when we stop support for JRuby < 1.7.0
130
+ if (!JRubyAdapter.isJRubyPreOneSeven()) {
131
+ JRubyAdapter.runScriptlet("Java::" + getClass().getName() + ".__persistent__ = true");
132
+ }
133
+ JRubyAdapter.put(rubyClassName, JRubyAdapter.runScriptlet("Java::" + getClass().getName()));
134
+ }
135
+ System.out.println("Set class: " + JRubyAdapter.get(rubyClassName));
136
+ }
137
+ JRubyAdapter.setScriptFilename(scriptName);
138
+ JRubyAdapter.runScriptlet(script);
139
+ rubyClass = JRubyAdapter.get(rubyClassName);
140
+ }
141
+ rubyInstance = this;
142
+ } else if (rubyClass != null) {
143
+ // We have a predefined Ruby class without corresponding Ruby source file.
144
+ System.out.println("Create separate Ruby instance for class: " + rubyClass);
145
+ rubyInstance = JRubyAdapter.runRubyMethod(rubyClass, "new");
146
+ JRubyAdapter.runRubyMethod(rubyInstance, "instance_variable_set", "@ruboto_java_instance", this);
147
+ } else {
148
+ // Neither script file nor predefined class
149
+ throw new RuntimeException("Either script or predefined class must be present.");
91
150
  }
92
151
  if (rubyClass != null) {
93
- System.out.println("Instanciating Ruby class: " + rubyClassName);
94
- rubyInstance = JRubyAdapter.callMethod(rubyClass, "new", this, Object.class);
95
- JRubyAdapter.callMethod(rubyInstance, "on_create", args[0]);
152
+ System.out.println("Call on_create on: " + rubyInstance + ", " + JRubyAdapter.get("JRUBY_VERSION"));
153
+ // FIXME(uwe): Simplify when we stop support for RubotoCore 0.4.7
154
+ if (JRubyAdapter.isJRubyPreOneSeven()) {
155
+ JRubyAdapter.put("$ruby_instance", rubyInstance);
156
+ JRubyAdapter.runScriptlet("$ruby_instance.on_create($bundle)");
157
+ } else if (JRubyAdapter.isJRubyOneSeven()) {
158
+ JRubyAdapter.runRubyMethod(rubyInstance, "on_create", args[0]);
159
+ } else {
160
+ throw new RuntimeException("Unknown JRuby version: " + JRubyAdapter.get("JRUBY_VERSION"));
161
+ }
96
162
  }
97
163
  } else if (configBundle != null) {
98
- // TODO: Why doesn't this work?
99
- // JRubyAdapter.callMethod(this, "initialize_ruboto");
100
- JRubyAdapter.execute("$activity.initialize_ruboto");
101
- // TODO: Why doesn't this work?
102
- // JRubyAdapter.callMethod(this, "on_create", args[0]);
103
- JRubyAdapter.execute("$activity.on_create($bundle)");
164
+ // FIXME(uwe): Simplify when we stop support for RubotoCore 0.4.7
165
+ if (JRubyAdapter.isJRubyPreOneSeven()) {
166
+ JRubyAdapter.runScriptlet("$activity.initialize_ruboto");
167
+ JRubyAdapter.runScriptlet("$activity.on_create($bundle)");
168
+ } else if (JRubyAdapter.isJRubyOneSeven()) {
169
+ JRubyAdapter.runRubyMethod(this, "initialize_ruboto");
170
+ JRubyAdapter.runRubyMethod(this, "on_create", args[0]);
171
+ } else {
172
+ throw new RuntimeException("Unknown JRuby version: " + JRubyAdapter.get("JRUBY_VERSION"));
173
+ }
104
174
  }
105
175
  } catch(IOException e){
106
176
  e.printStackTrace();