ruboto 0.9.0 → 0.10.0.rc.0
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.
- data/README.md +13 -13
- data/Rakefile +4 -4
- data/assets/rakelib/ruboto.rake +8 -4
- data/assets/samples/sample_broadcast_receiver.rb +0 -8
- data/assets/src/InheritingBroadcastReceiver.java +0 -19
- data/assets/src/InheritingClass.java +1 -8
- data/assets/src/RubotoActivity.java +1 -20
- data/assets/src/RubotoBroadcastReceiver.java +15 -25
- data/assets/src/RubotoService.java +1 -15
- data/assets/src/org/ruboto/EntryPointActivity.java +0 -1
- data/assets/src/org/ruboto/JRubyAdapter.java +9 -8
- data/assets/src/org/ruboto/RubotoComponent.java +0 -3
- data/assets/src/org/ruboto/Script.java +9 -9
- data/assets/src/org/ruboto/ScriptInfo.java +0 -15
- data/assets/src/org/ruboto/ScriptLoader.java +31 -43
- data/assets/src/ruboto/activity.rb +16 -41
- data/assets/src/ruboto/base.rb +0 -70
- data/assets/src/ruboto/broadcast_receiver.rb +2 -22
- data/assets/src/ruboto/package.rb +0 -1
- data/assets/src/ruboto/preference.rb +7 -3
- data/assets/src/ruboto/service.rb +14 -51
- data/assets/src/ruboto/widget.rb +2 -2
- data/lib/DexClient.java +10 -3
- data/lib/ruboto/util/build.rb +0 -5
- data/lib/ruboto/util/code_formatting.rb +1 -1
- data/lib/ruboto/util/update.rb +69 -50
- data/lib/ruboto/util/verify.rb +6 -5
- data/lib/ruboto/util/xml_element.rb +16 -29
- data/lib/ruboto/version.rb +2 -2
- data/test/activity/mytest_activity.rb +56 -0
- data/test/activity/mytest_activity_test.rb +52 -0
- data/test/activity/mytest_otherfile_activity.rb +12 -0
- data/test/activity/navigation_activity.rb +1 -1
- data/test/activity/subclass_activity.rb +10 -5
- data/test/activity/subclass_activity_test.rb +17 -2
- data/test/activity/view_constants_activity.rb +42 -0
- data/test/activity/view_constants_activity_test.rb +30 -0
- data/test/app_test_methods.rb +31 -26
- data/test/broadcast_receiver_test.rb +3 -1
- data/test/ruboto_gen_test.rb +4 -4
- data/test/test_helper.rb +5 -2
- metadata +18 -38
- data/assets/src/ruboto.rb +0 -25
- data/assets/src/ruboto/legacy.rb +0 -220
- data/assets/src/ruboto/menu.rb +0 -88
- data/lib/java_class_gen/InheritingClass.java.erb +0 -10
- data/test/block_def_activity/image_button_activity.rb +0 -23
- data/test/block_def_activity/image_button_activity_test.rb +0 -21
- data/test/block_def_activity/image_button_and_button_activity.rb +0 -20
- data/test/block_def_activity/image_button_and_button_activity_test.rb +0 -27
- data/test/block_def_activity/margins_activity.rb +0 -18
- data/test/block_def_activity/margins_activity_test.rb +0 -25
- data/test/block_def_activity/option_menu_activity.rb +0 -26
- data/test/block_def_activity/option_menu_activity_test.rb +0 -17
- data/test/block_def_activity/psych_activity.rb +0 -35
- data/test/block_def_activity/psych_activity_test.rb +0 -16
- data/test/block_def_activity/stack_activity.rb +0 -25
- data/test/block_def_activity/stack_activity_test.rb +0 -39
- data/test/handle_activity/image_button_activity.rb +0 -21
- data/test/handle_activity/image_button_activity_test.rb +0 -21
- data/test/handle_activity/image_button_and_button_activity.rb +0 -24
- data/test/handle_activity/image_button_and_button_activity_test.rb +0 -27
- data/test/handle_activity/margins_activity.rb +0 -15
- data/test/handle_activity/margins_activity_test.rb +0 -25
- data/test/handle_activity/option_menu_activity.rb +0 -25
- data/test/handle_activity/option_menu_activity_test.rb +0 -20
- data/test/handle_activity/psych_activity.rb +0 -31
- data/test/handle_activity/psych_activity_test.rb +0 -16
- data/test/handle_activity/stack_activity.rb +0 -24
- data/test/handle_activity/stack_activity_test.rb +0 -47
- data/test/view_constants_test.rb +0 -103
data/assets/src/ruboto/widget.rb
CHANGED
@@ -90,10 +90,10 @@ end
|
|
90
90
|
|
91
91
|
def ruboto_import_widget(class_name, package_name="android.widget")
|
92
92
|
if class_name.is_a?(String) or class_name.is_a?(Symbol)
|
93
|
-
klass =
|
93
|
+
klass = java_import("#{package_name}.#{class_name}") || eval("Java::#{package_name}.#{class_name}")
|
94
94
|
else
|
95
95
|
klass = class_name
|
96
|
-
|
96
|
+
java_import klass
|
97
97
|
class_name = klass.java_class.name.split('.')[-1]
|
98
98
|
end
|
99
99
|
|
data/lib/DexClient.java
CHANGED
@@ -4,6 +4,8 @@ import java.io.ByteArrayOutputStream;
|
|
4
4
|
import java.io.OutputStreamWriter;
|
5
5
|
|
6
6
|
import com.android.dx.cf.iface.ParseException;
|
7
|
+
// import com.android.dx.dex.DexFormat;
|
8
|
+
// import com.android.dx.dex.DexOptions;
|
7
9
|
import com.android.dx.dex.cf.CfOptions;
|
8
10
|
import com.android.dx.dex.cf.CfTranslator;
|
9
11
|
import com.android.dx.dex.code.PositionList;
|
@@ -13,11 +15,15 @@ import com.android.dx.dex.file.DexFile;
|
|
13
15
|
public class DexClient {
|
14
16
|
/** {@code non-null;} output file in-progress */
|
15
17
|
private static DexFile outputDex;
|
16
|
-
|
18
|
+
// private static DexOptions dexOptions = new DexOptions();
|
19
|
+
// static {
|
20
|
+
// dexOptions.targetApiLevel = DexFormat.API_NO_EXTENDED_OPCODES;
|
21
|
+
// }
|
17
22
|
private final CfOptions cfOptions;
|
18
23
|
|
19
24
|
public DexClient() {
|
20
25
|
outputDex = new DexFile();
|
26
|
+
// outputDex = new DexFile(dexOptions);
|
21
27
|
cfOptions = new CfOptions();
|
22
28
|
|
23
29
|
cfOptions.positionInfo = PositionList.LINES;
|
@@ -51,8 +57,9 @@ public class DexClient {
|
|
51
57
|
*/
|
52
58
|
private boolean processClass(String name, byte[] bytes) {
|
53
59
|
try {
|
54
|
-
ClassDefItem clazz
|
55
|
-
|
60
|
+
ClassDefItem clazz;
|
61
|
+
clazz = CfTranslator.translate(name, bytes, cfOptions);
|
62
|
+
// clazz = CfTranslator.translate(name, bytes, cfOptions, dexOptions);
|
56
63
|
outputDex.add(clazz);
|
57
64
|
return true;
|
58
65
|
} catch (ParseException ex) {
|
data/lib/ruboto/util/build.rb
CHANGED
@@ -112,9 +112,6 @@ module Ruboto
|
|
112
112
|
methods = check_methods(methods, params[:force])
|
113
113
|
puts "Done. Methods created: #{methods.count}"
|
114
114
|
|
115
|
-
# Remove any duplicate constants (use *args handle multiple parameter lists)
|
116
|
-
constants = methods.map(&:constant_string).uniq
|
117
|
-
|
118
115
|
params[:implements] = params[:implements].split(",").push('org.ruboto.RubotoComponent').join(",")
|
119
116
|
|
120
117
|
action = class_desc.name == "class" ? "extends" : "implements"
|
@@ -125,8 +122,6 @@ module Ruboto
|
|
125
122
|
"THE_ANDROID_CLASS" => (params[:class] || params[:interface]) +
|
126
123
|
(params[:implements] == "" ? "" : ((action != 'implements' ? " implements " : ', ') + params[:implements].split(",").join(", "))),
|
127
124
|
"THE_RUBOTO_CLASS" => params[:name],
|
128
|
-
"THE_CONSTANTS" => constants.map { |i| "public static final int #{i} = #{constants.index(i)};" }.indent.join("\n"),
|
129
|
-
"CONSTANTS_COUNT" => methods.count.to_s,
|
130
125
|
"THE_CONSTRUCTORS" => class_desc.name == "class" ?
|
131
126
|
class_desc.get_elements("constructor").map { |i| i.constructor_definition(params[:name]) }.join("\n\n") : "",
|
132
127
|
"THE_METHODS" => methods.map { |i| i.method_definition(params[:name]) }.join("\n\n")
|
@@ -10,7 +10,7 @@ module Ruboto
|
|
10
10
|
body_clause.indent, "}"]
|
11
11
|
end
|
12
12
|
|
13
|
-
def if_else(condition, if_clause, else_clause)
|
13
|
+
def if_else(condition, if_clause, else_clause = [])
|
14
14
|
["if (#{condition}) {", if_clause.indent, else_clause.compact.empty? ? nil : "} else {", else_clause.indent, "}"]
|
15
15
|
end
|
16
16
|
|
data/lib/ruboto/util/update.rb
CHANGED
@@ -10,7 +10,6 @@ module Ruboto
|
|
10
10
|
#
|
11
11
|
# Updating components
|
12
12
|
#
|
13
|
-
|
14
13
|
def update_android
|
15
14
|
root = Dir.getwd
|
16
15
|
build_xml_file = "#{root}/build.xml"
|
@@ -122,15 +121,6 @@ module Ruboto
|
|
122
121
|
ant_script.gsub!(/\s*<!-- BEGIN added by Ruboto -->.*?<!-- END added by Ruboto -->\s*/m, '')
|
123
122
|
raise "Bad ANT script" unless ant_script.gsub!(/\s*(<\/project>)/, "\n\n#{run_tests_override}\n\n\\1")
|
124
123
|
File.open('build.xml', 'w') { |f| f << ant_script }
|
125
|
-
|
126
|
-
# FIXME(uwe): Remove when we stop supporting update from Ruboto < 0.5.3
|
127
|
-
if File.directory? 'assets/scripts'
|
128
|
-
log_action 'Moving test scripts to the "src" directory.' do
|
129
|
-
FileUtils.mv Dir['assets/scripts/*'], 'src'
|
130
|
-
FileUtils.rm_rf 'assets/scripts'
|
131
|
-
end
|
132
|
-
end
|
133
|
-
# EMXIF
|
134
124
|
end
|
135
125
|
end
|
136
126
|
|
@@ -172,7 +162,10 @@ module Ruboto
|
|
172
162
|
|
173
163
|
# FIXME(uwe): Try keeping the class count low to enable installation on Android 2.3 devices
|
174
164
|
# unless new_jruby_version =~ /^1.7.0/ && verify_target_sdk < 15
|
175
|
-
log_action("Copying dx.jar to libs")
|
165
|
+
log_action("Copying dx.jar to libs") do
|
166
|
+
copier.copy 'libs'
|
167
|
+
# File.open('project.properties', 'a'){|f| f << "dex.force.jumbo=true\n"}
|
168
|
+
end
|
176
169
|
# end
|
177
170
|
|
178
171
|
reconfigure_jruby_libs(new_jruby_version)
|
@@ -205,13 +198,6 @@ module Ruboto
|
|
205
198
|
|
206
199
|
def update_assets
|
207
200
|
puts "\nCopying files:"
|
208
|
-
|
209
|
-
# FIXME(uwe): Remove when we stop supporting updating from Ruboto < 0.6.0
|
210
|
-
if File.exists?('Rakefile') && !File.exists?('rakelib/ruboto.rake')
|
211
|
-
FileUtils.rm 'Rakefile'
|
212
|
-
end
|
213
|
-
# EMXIF
|
214
|
-
|
215
201
|
weak_copier = Ruboto::Util::AssetCopier.new Ruboto::ASSETS, '.', false
|
216
202
|
%w{.gitignore Rakefile}.each { |f| log_action(f) { weak_copier.copy f } }
|
217
203
|
|
@@ -333,11 +319,6 @@ module Ruboto
|
|
333
319
|
end
|
334
320
|
|
335
321
|
def update_core_classes(force = nil)
|
336
|
-
# FIXME(uwe): Remove when we stop supporting updating from Ruboto 0.5.5 and older.
|
337
|
-
FileUtils.rm_rf 'src/org/ruboto/callbacks'
|
338
|
-
FileUtils.rm_f 'src/org/ruboto/RubotoView.java'
|
339
|
-
# EMXIF
|
340
|
-
|
341
322
|
generate_core_classes(:class => "all", :method_base => "on", :method_include => "", :method_exclude => "", :force => force, :implements => "")
|
342
323
|
end
|
343
324
|
|
@@ -347,11 +328,6 @@ module Ruboto
|
|
347
328
|
end
|
348
329
|
|
349
330
|
def update_ruboto(force=nil)
|
350
|
-
log_action("Copying ruboto.rb") do
|
351
|
-
from = File.expand_path(Ruboto::GEM_ROOT + "/assets/#{SCRIPTS_DIR}/ruboto.rb")
|
352
|
-
to = File.expand_path("./#{SCRIPTS_DIR}/ruboto.rb")
|
353
|
-
FileUtils.cp from, to
|
354
|
-
end
|
355
331
|
log_action("Copying ruboto/version.rb") do
|
356
332
|
from = File.expand_path(Ruboto::GEM_ROOT + "/lib/ruboto/version.rb")
|
357
333
|
to = File.expand_path("./#{SCRIPTS_DIR}/ruboto/version.rb")
|
@@ -370,6 +346,7 @@ module Ruboto
|
|
370
346
|
def reconfigure_jruby_libs(jruby_core_version)
|
371
347
|
reconfigure_jruby_core(jruby_core_version)
|
372
348
|
reconfigure_jruby_stdlib
|
349
|
+
reconfigure_dx_jar
|
373
350
|
end
|
374
351
|
|
375
352
|
# - Removes unneeded code from jruby-core
|
@@ -383,20 +360,33 @@ module Ruboto
|
|
383
360
|
Dir.chdir 'tmp' do
|
384
361
|
FileUtils.move "../#{jruby_core}", "."
|
385
362
|
`jar -xf #{jruby_core}`
|
363
|
+
raise "Unpacking jruby-core jar failed: #$?" unless $? == 0
|
386
364
|
File.delete jruby_core
|
387
365
|
if jruby_core_version >= '1.7.0'
|
388
366
|
excluded_core_packages = [
|
367
|
+
'**/*Darwin*',
|
368
|
+
'**/*Solaris*',
|
369
|
+
'**/*windows*',
|
370
|
+
'**/*Windows*',
|
389
371
|
'META-INF', 'cext',
|
390
372
|
'com/headius', # included since we are trying to use DexClient
|
391
373
|
'com/headius/invokebinder',
|
392
|
-
'com/kenai/constantine', 'com/kenai/jffi', 'com/martiansoftware',
|
374
|
+
'com/kenai/constantine', 'com/kenai/jffi', 'com/martiansoftware',
|
375
|
+
'ext',
|
376
|
+
'java',
|
393
377
|
'jline', 'jni',
|
394
378
|
'jnr/constants/platform/darwin', 'jnr/constants/platform/fake', 'jnr/constants/platform/freebsd',
|
395
379
|
'jnr/constants/platform/openbsd', 'jnr/constants/platform/sunos', 'jnr/constants/platform/windows',
|
396
|
-
'jnr/ffi/annotations', 'jnr/ffi/byref',
|
380
|
+
'jnr/ffi/annotations', 'jnr/ffi/byref',
|
381
|
+
'jnr/ffi/provider', 'jnr/ffi/util',
|
397
382
|
'jnr/ffi/posix/util',
|
383
|
+
'jnr/ffi/Struct$*',
|
384
|
+
'jnr/ffi/types',
|
385
|
+
'jnr/posix/MacOS*',
|
386
|
+
'jnr/posix/OpenBSD*',
|
398
387
|
'org/apache',
|
399
388
|
'org/bouncycastle', # TODO(uwe): Issue #154 Add back when we add jruby-openssl. The bouncycastle included in Android is cripled.
|
389
|
+
'org/fusesource',
|
400
390
|
'org/jruby/ant',
|
401
391
|
'org/jruby/cext',
|
402
392
|
# 'org/jruby/compiler', # Needed for initialization, but shoud not be necessary
|
@@ -410,23 +400,13 @@ module Ruboto
|
|
410
400
|
'org/jruby/ext/ffi/io',
|
411
401
|
'org/jruby/ext/ffi/jffi',
|
412
402
|
'org/jruby/ext/openssl', # TODO(uwe): Issue #154 Add back when we add jruby-openssl.
|
413
|
-
|
414
|
-
# FIXME(uwe): IR is the future. We should try using it.
|
415
|
-
# 'org/jruby/ir',
|
416
|
-
'org/jruby/ir/dataflow',
|
417
|
-
# 'org/jruby/ir/instructions',
|
418
|
-
# 'org/jruby/ir/interpreter',
|
419
|
-
# 'org/jruby/ir/operands',
|
420
|
-
# 'org/jruby/ir/passes',
|
421
|
-
'org/jruby/ir/representations',
|
422
|
-
'org/jruby/ir/targets',
|
423
|
-
'org/jruby/ir/transformations',
|
424
|
-
'org/jruby/ir/util',
|
425
|
-
|
426
403
|
'org/jruby/javasupport/bsf',
|
427
|
-
# 'org/jruby/runtime/invokedynamic', # Should be excluded
|
428
404
|
|
429
405
|
# 'org/jruby/management', # should be excluded
|
406
|
+
|
407
|
+
'org/jruby/org/bouncycastle', # TODO(uwe): Issue #154 Add back when we add jruby-openssl. The bouncycastle included in Android is cripled.
|
408
|
+
|
409
|
+
# 'org/jruby/runtime/invokedynamic', # Should be excluded
|
430
410
|
]
|
431
411
|
|
432
412
|
# TODO(uwe): Remove when we stop supporting jruby-jars < 1.7.0
|
@@ -452,17 +432,25 @@ module Ruboto
|
|
452
432
|
end
|
453
433
|
|
454
434
|
excluded_core_packages.each do |i|
|
455
|
-
|
435
|
+
if File.directory? i
|
436
|
+
FileUtils.remove_dir(i, true) rescue puts "Failed to remove package: #{i} (#{$!})"
|
437
|
+
elsif Dir[i].each { |f| FileUtils.rm_rf f }.empty?
|
438
|
+
puts "Exclude pattern #{i.inspect} found no files."
|
439
|
+
end
|
456
440
|
end
|
457
441
|
|
458
442
|
# FIXME(uwe): Add a Ruboto.yml config for this if it works
|
459
|
-
# Reduces the installation footprint, but also reduces performance and stack
|
443
|
+
# Reduces the installation footprint, but also reduces performance and increases stack
|
460
444
|
# FIXME(uwe): Measure the performance change
|
461
|
-
if false && jruby_core_version =~ /^1.7
|
462
|
-
invokers = Dir['**/*$
|
463
|
-
log_action("Removing invokers
|
445
|
+
if false && jruby_core_version =~ /^1.7./ && Dir.chdir('../..') { verify_min_sdk < 15 }
|
446
|
+
invokers = Dir['**/*$INVOKER$*.class']
|
447
|
+
log_action("Removing invokers(#{invokers.size})") do
|
464
448
|
FileUtils.rm invokers
|
465
449
|
end
|
450
|
+
populators = Dir['**/*$POPULATOR.class']
|
451
|
+
log_action("Removing populators(#{populators.size})") do
|
452
|
+
FileUtils.rm populators
|
453
|
+
end
|
466
454
|
end
|
467
455
|
|
468
456
|
# Uncomment this section to get a jar for each top level package in the core
|
@@ -472,10 +460,11 @@ module Ruboto
|
|
472
460
|
#end
|
473
461
|
|
474
462
|
# Add our proxy class factory
|
475
|
-
`javac -source 1.6 -target 1.6 -cp .:#{Ruboto::ASSETS}/libs/dx.jar
|
463
|
+
`javac -source 1.6 -target 1.6 -cp .:#{Ruboto::ASSETS}/libs/dx.jar -bootclasspath #{Dir["#{Ruboto::SdkVersions::ANDROID_HOME}/platforms/android-*/android.jar"][0]} -d . #{Ruboto::GEM_ROOT}/lib/*.java`
|
476
464
|
raise "Compile failed" unless $? == 0
|
477
465
|
|
478
466
|
`jar -cf ../#{jruby_core} .`
|
467
|
+
raise "Creating repackaged jruby-core jar failed: #$?" unless $? == 0
|
479
468
|
end
|
480
469
|
FileUtils.remove_dir "tmp", true
|
481
470
|
end
|
@@ -494,6 +483,7 @@ module Ruboto
|
|
494
483
|
FileUtils.mkdir_p 'new/jruby.home'
|
495
484
|
Dir.chdir 'old' do
|
496
485
|
`jar -xf ../../#{jruby_stdlib}`
|
486
|
+
raise "Unpacking jruby-stdlib jar failed: #$?" unless $? == 0
|
497
487
|
end
|
498
488
|
FileUtils.move 'old/META-INF/jruby.home/lib', 'new/jruby.home/lib'
|
499
489
|
FileUtils.rm_rf 'new/jruby.home/lib/ruby/gems'
|
@@ -531,6 +521,7 @@ module Ruboto
|
|
531
521
|
# end
|
532
522
|
|
533
523
|
`jar -cf ../../#{jruby_stdlib} .`
|
524
|
+
raise "Creating repackaged jruby-stdlib jar failed: #$?" unless $? == 0
|
534
525
|
end
|
535
526
|
end
|
536
527
|
end
|
@@ -539,6 +530,34 @@ module Ruboto
|
|
539
530
|
end
|
540
531
|
end
|
541
532
|
|
533
|
+
# - Removes unneeded code from dx.jar
|
534
|
+
def reconfigure_dx_jar
|
535
|
+
dx_jar = 'dx.jar'
|
536
|
+
Dir.chdir 'libs' do
|
537
|
+
log_action("Removing unneeded classes from #{dx_jar}") do
|
538
|
+
FileUtils.rm_rf 'tmp'
|
539
|
+
Dir.mkdir 'tmp'
|
540
|
+
Dir.chdir 'tmp' do
|
541
|
+
FileUtils.move "../#{dx_jar}", "."
|
542
|
+
`jar -xf #{dx_jar}`
|
543
|
+
raise "Unpacking dx.jar jar failed: #$?" unless $? == 0
|
544
|
+
File.delete dx_jar
|
545
|
+
excluded_core_packages = [
|
546
|
+
'com/android/dx/command',
|
547
|
+
'com/android/dx/ssa',
|
548
|
+
'junit',
|
549
|
+
]
|
550
|
+
excluded_core_packages.each do |i|
|
551
|
+
FileUtils.remove_dir(i, true) rescue puts "Failed to remove package: #{i} (#{$!})"
|
552
|
+
end
|
553
|
+
`jar -cf ../#{dx_jar} .`
|
554
|
+
raise "Creating repackaged dx.jar failed: #$?" unless $? == 0
|
555
|
+
end
|
556
|
+
FileUtils.remove_dir "tmp", true
|
557
|
+
end
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
542
561
|
def update_bundle
|
543
562
|
if File.exist?('Gemfile.apk') && File.exists?('libs/bundle.jar')
|
544
563
|
FileUtils.rm 'libs/bundle.jar'
|
data/lib/ruboto/util/verify.rb
CHANGED
@@ -48,16 +48,17 @@ module Ruboto
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def verify_min_sdk
|
51
|
+
return @min_sdk if @min_sdk
|
51
52
|
verify_sdk_versions
|
52
|
-
|
53
|
-
abort "you must specify a minimum sdk level in the manifest (e.g., <uses-sdk android:minSdkVersion='3' android:targetSdkVersion='8' />)" unless
|
54
|
-
@min_sdk
|
53
|
+
min_sdk_attr = @uses_sdk.attribute('android:minSdkVersion').value
|
54
|
+
abort "you must specify a minimum sdk level in the manifest (e.g., <uses-sdk android:minSdkVersion='3' android:targetSdkVersion='8' />)" unless min_sdk_attr
|
55
|
+
@min_sdk = min_sdk_attr.to_i
|
55
56
|
end
|
56
57
|
|
57
58
|
def verify_target_sdk
|
58
59
|
return @target_sdk if @target_sdk
|
59
60
|
verify_sdk_versions
|
60
|
-
target_sdk_attr
|
61
|
+
target_sdk_attr = @uses_sdk.attribute('android:targetSdkVersion').value
|
61
62
|
abort "you must specify a target sdk level in the manifest (e.g., <uses-sdk android:minSdkVersion='3' android:targetSdkVersion='8' />)" unless target_sdk_attr
|
62
63
|
@target_sdk = target_sdk_attr.to_i
|
63
64
|
end
|
@@ -86,4 +87,4 @@ module Ruboto
|
|
86
87
|
|
87
88
|
end
|
88
89
|
end
|
89
|
-
end
|
90
|
+
end
|
@@ -151,7 +151,7 @@ module Ruboto
|
|
151
151
|
rv ? "return #{rv}" : default_return
|
152
152
|
end
|
153
153
|
|
154
|
-
def ruby_call(
|
154
|
+
def ruby_call(camelize = false)
|
155
155
|
params = parameters
|
156
156
|
args = ""
|
157
157
|
if params.size > 1
|
@@ -175,7 +175,6 @@ module Ruboto
|
|
175
175
|
convert_return = "#{return_class.sub(/<.*>$/, '')}.class, "
|
176
176
|
end
|
177
177
|
|
178
|
-
if on_ruby_instance
|
179
178
|
method_name = camelize ? attribute("name") : snake_case_attribute
|
180
179
|
global_args = params.map{|i| "$arg_#{i[0]}"}.join(", ")
|
181
180
|
["// FIXME(uwe): Simplify when we stop support for RubotoCore 0.4.7"] +
|
@@ -192,9 +191,6 @@ module Ruboto
|
|
192
191
|
['throw new RuntimeException("Unknown JRuby version: " + JRubyAdapter.get("JRUBY_VERSION"));']
|
193
192
|
)
|
194
193
|
)
|
195
|
-
else
|
196
|
-
["#{return_cast}JRubyAdapter.runRubyMethod(#{convert_return}scriptInfo.getCallbackProcs()[#{constant_string}], \"call\" #{args});"]
|
197
|
-
end
|
198
194
|
end
|
199
195
|
|
200
196
|
def snake_case_attribute
|
@@ -205,31 +201,22 @@ module Ruboto
|
|
205
201
|
method_call(
|
206
202
|
(attribute("return") ? attribute("return") : "void"),
|
207
203
|
attribute("name"), parameters,
|
208
|
-
get_elements('exception').map{|m| m.attribute('type')},
|
204
|
+
get_elements('exception').map { |m| m.attribute('type') },
|
209
205
|
["if (ScriptLoader.isCalledFromJRuby()) #{super_return}",
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
[super_return]
|
225
|
-
)
|
226
|
-
)
|
227
|
-
),
|
228
|
-
[
|
229
|
-
%Q{Log.i("Method called before JRuby runtime was initialized: #{class_name}##{attribute('name')}");},
|
230
|
-
super_return,
|
231
|
-
]
|
232
|
-
)
|
206
|
+
if_else("!JRubyAdapter.isInitialized()",
|
207
|
+
[%Q{Log.i("Method called before JRuby runtime was initialized: #{class_name}##{attribute('name')}");},
|
208
|
+
super_return]),
|
209
|
+
'String rubyClassName = scriptInfo.getRubyClassName();',
|
210
|
+
"if (rubyClassName == null) #{super_return}",
|
211
|
+
if_else(
|
212
|
+
"(Boolean)JRubyAdapter.runScriptlet(rubyClassName + \".instance_methods(false).any?{|m| m.to_sym == :#{snake_case_attribute}}\")",
|
213
|
+
ruby_call,
|
214
|
+
if_else(
|
215
|
+
"(Boolean)JRubyAdapter.runScriptlet(rubyClassName + \".instance_methods(false).any?{|m| m.to_sym == :#{attribute('name')}}\")",
|
216
|
+
ruby_call(true),
|
217
|
+
[super_return]
|
218
|
+
)
|
219
|
+
)
|
233
220
|
]
|
234
221
|
).indent.join("\n")
|
235
222
|
end
|
data/lib/ruboto/version.rb
CHANGED
@@ -5,6 +5,6 @@ Android using the Ruby language and libraries. It includes support libraries
|
|
5
5
|
and generators for creating projects, classes, tests, and more. The complete
|
6
6
|
APIs of Android, Java, and Ruby is available to you using the Ruby language.
|
7
7
|
EOF
|
8
|
-
VERSION = '0.
|
9
|
-
UPDATE_VERSION_LIMIT = '0.
|
8
|
+
VERSION = '0.10.0.rc.0'
|
9
|
+
UPDATE_VERSION_LIMIT = '0.7.0'
|
10
10
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'ruboto/activity'
|
2
|
+
require 'ruboto/widget'
|
3
|
+
|
4
|
+
ruboto_import_widgets :Button, :LinearLayout, :TextView
|
5
|
+
|
6
|
+
class MytestActivity < Java::OrgRuboto::EntryPointActivity
|
7
|
+
def on_create(bundle)
|
8
|
+
super
|
9
|
+
set_title File.basename(__FILE__).chomp('_activity.rb').split('_').
|
10
|
+
map { |s| "#{s[0..0].upcase}#{s[1..-1]}" }.join(' ')
|
11
|
+
|
12
|
+
self.content_view =
|
13
|
+
linear_layout :orientation => :vertical, :gravity => :center_horizontal do
|
14
|
+
text_view :text => 'What hath Matz wrought?', :id => 42, :width => :match_parent,
|
15
|
+
:gravity => :center, :text_size => 48.0
|
16
|
+
button :text => 'Infile class', :width => :match_parent, :id => 48,
|
17
|
+
:on_click_listener => proc { start_infile_activity }
|
18
|
+
button :text => 'Otherfile class', :width => :match_parent, :id => 49,
|
19
|
+
:on_click_listener => proc { start_otherfile_activity }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def start_infile_activity
|
26
|
+
i = android.content.Intent.new
|
27
|
+
i.setClassName($package_name, 'org.ruboto.RubotoActivity')
|
28
|
+
configBundle = android.os.Bundle.new
|
29
|
+
configBundle.put_string('ClassName', 'MytestInfileActivity')
|
30
|
+
i.putExtra('RubotoActivity Config', configBundle)
|
31
|
+
startActivity(i)
|
32
|
+
end
|
33
|
+
|
34
|
+
def start_otherfile_activity
|
35
|
+
i = android.content.Intent.new
|
36
|
+
i.setClassName($package_name, 'org.ruboto.RubotoActivity')
|
37
|
+
configBundle = android.os.Bundle.new
|
38
|
+
configBundle.put_string('ClassName', 'MytestOtherfileActivity')
|
39
|
+
i.putExtra('RubotoActivity Config', configBundle)
|
40
|
+
startActivity(i)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
class MytestInfileActivity
|
46
|
+
def on_create(bundle)
|
47
|
+
super
|
48
|
+
set_title 'Infile Activity'
|
49
|
+
|
50
|
+
self.content_view =
|
51
|
+
linear_layout :orientation => :vertical, :gravity => :center_horizontal do
|
52
|
+
text_view :text => 'This is an infile activity.', :id => 42, :width => :match_parent,
|
53
|
+
:gravity => :center, :text_size => 48.0
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|