ruboto 0.9.0 → 0.10.0.rc.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|