android_query 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 41d095320389479597e37525949a8bc4ce358f41
4
+ data.tar.gz: 557d9fb428ae43b7f9fc28e94a6c37f70c658b10
5
+ SHA512:
6
+ metadata.gz: 4bfeeea7d9eccc1d1eb62072d5cf89aa66ad6d8b9aadac3381230a15f0e151748f05d25a774365b92e281ec942fb552c4f3e47b532dad9a7c84295d07fbe2e73
7
+ data.tar.gz: 497d4d4f6c90c9d3122b090d16a2aeaa784b1667793bd7e4dccf8a856b89aed7fa48fd6e738ba0ae605a2583c3603f19ac3799c79699380ae5918d459096e0cc
data/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # Android Query
2
+
3
+ This gem is in its very early development. Please don't use in production.
4
+
5
+ Currently, `android_query` only supports the `LinearLayout`, `EditText`, `TextView`, and `Button` views.
6
+
7
+ The goal of `android_query` is to make android development on RubyMotion fun, easy, and quick.
8
+ It's intended for developers who prefer to code their UIs rather than use a GUI editor.
9
+
10
+ `android_query` was inspired by the wonderful [rmq](http://github.com/infinitered/rmq/) gem.
11
+
12
+ ## Installation
13
+
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'android_query', '~> 0.0.1'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install android_query
28
+
29
+ ## Usage
30
+
31
+ ```ruby
32
+ def onCreate(savedInstanceState)
33
+ super
34
+ @counter = 0
35
+ self.aq = AndroidQuery.new(self)
36
+ aq.layout(:linear, weight_sum: 10, w: :mp, h: :mp) do |linear|
37
+ aq.edit_text(linear, id: 10, w: :mp, h: :wc)
38
+ aq.text_view(linear, id: 11, text: "Hello Android Query!", w: :mp, h: :wc, weight: 8)
39
+ aq.layout(:linear, parent: linear, weight_sum: 2, weight: 1, orientation: :h) do |buttons_layout|
40
+ aq.button(buttons_layout, text: "+ (plus)", w: :wc, h: :mp, weight: 1, click: :increase_counter)
41
+ aq.button(buttons_layout, text: "- (minus)", w: :wc, h: :mp, weight: 1, click: :decrease_counter)
42
+ end
43
+ aq.layout(:linear, parent: linear, weight_sum: 2, weight: 1) do |sweet|
44
+ aq.button(sweet, id: 12, text: "This is SO SWEET!", w: :mp, h: :mp, click: :toast_me, weight: 1)
45
+ aq.button(sweet, id: 13, text: "Change Label", w: :mp, h: :mp, click: :show_message, weight: 1)
46
+ end
47
+ end
48
+ end
49
+
50
+ def toast_me(view)
51
+ aq.toast("You've been toasted #{@counter} times!", gravity: :center)
52
+ end
53
+
54
+ def increase_counter(view)
55
+ @counter += 1
56
+ end
57
+
58
+ def decrease_counter(view)
59
+ @counter -= 1
60
+ end
61
+
62
+ def show_message(view)
63
+ my_text = aq.find(10)
64
+ my_label = aq.find(11)
65
+ my_label.text = my_text.text
66
+ my_text.text = ""
67
+ end
68
+ ```
69
+
70
+ ![Sample Screenshot](screenshot.png)
71
+
72
+ ## Contributing
73
+
74
+ Bug reports and pull requests are welcome on GitHub at https://github.com/aesmail/android_query.
75
+
76
+ ## License
77
+
78
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,178 @@
1
+ class AndroidQuery
2
+ attr_accessor :activity
3
+
4
+ def initialize(source)
5
+ self.activity = source
6
+ end
7
+
8
+ def layout(layout_sym, options = {}, &block)
9
+ layout_info = get_layout(layout_sym, options)
10
+ my_layout = create_layout_with_params(layout_info, options)
11
+ block_layout = {
12
+ layout: my_layout,
13
+ layout_class: layout_info[:layout_class],
14
+ params_class: layout_info[:params_class],
15
+ layout_sym: layout_sym,
16
+ parent: layout_info[:parent],
17
+ }
18
+ block.call(block_layout)
19
+ block_layout[:parent][:layout].addView(my_layout) if block_layout[:parent]
20
+ set_content(block_layout) if block_layout[:parent].nil?
21
+ block_layout
22
+ end
23
+
24
+ def text_view(layout, options = {})
25
+ tv = Android::Widget::TextView.new(self.activity)
26
+ create_view_layout_params(tv, layout, options)
27
+ end
28
+
29
+ def edit_text(layout, options = {})
30
+ et = Android::Widget::EditText.new(self.activity)
31
+ create_view_layout_params(et, layout, options)
32
+ end
33
+
34
+ def button(layout, options = {})
35
+ btn = Android::Widget::Button.new(self.activity)
36
+ create_view_layout_params(btn, layout, options)
37
+ end
38
+
39
+ def set_content(layout, params = {})
40
+ self.activity.setContentView(layout[:layout])
41
+ end
42
+
43
+ def get_layout(layout, options)
44
+ options = merge_options(options)
45
+ layout_and_params = case layout
46
+ when :linear
47
+ [Android::Widget::LinearLayout, Android::Widget::LinearLayout::LayoutParams]
48
+ when :relative
49
+ [Android::Widget::RelativeLayout, Android::Widget::RelativeLayout::LayoutParams]
50
+ when :absolute
51
+ [Android::Widget::AbsoluteLayout, Android::Widget::AbsoluteLayout::LayoutParams]
52
+ else
53
+ layout
54
+ end
55
+ {
56
+ layout: nil,
57
+ layout_class: layout_and_params[0],
58
+ params_class: layout_and_params[1],
59
+ layout_sym: layout,
60
+ parent: options[:parent],
61
+ }
62
+ end
63
+
64
+ def merge_options(options)
65
+ {
66
+ w: :mp,
67
+ h: :wc,
68
+ orientation: :vertical,
69
+ weight: 0,
70
+ weight_sum: 0,
71
+ parent: nil,
72
+ click: nil,
73
+ id: nil,
74
+ }.merge(options)
75
+ end
76
+
77
+ def get_width(options, layout)
78
+ case options[:w]
79
+ when :mp, :match_parent
80
+ layout[:params_class]::MATCH_PARENT
81
+ when :wc, :wrap_content
82
+ layout[:params_class]::WRAP_CONTENT
83
+ else
84
+ options[:w]
85
+ end
86
+ end
87
+
88
+ def get_height(options, layout)
89
+ case options[:h]
90
+ when :mp, :match_parent
91
+ layout[:params_class]::MATCH_PARENT
92
+ when :wc, :wrap_content
93
+ layout[:params_class]::WRAP_CONTENT
94
+ else
95
+ options[:h]
96
+ end
97
+ end
98
+
99
+ def get_orientation(options, layout)
100
+ case options[:orientation]
101
+ when :vertical, :v
102
+ layout[:layout_class]::VERTICAL
103
+ when :horizontal, :h
104
+ layout[:layout_class]::HORIZONTAL
105
+ else
106
+ raise 'Please set either :horizontal or :vertical for the orientation'
107
+ end
108
+ end
109
+
110
+ def create_layout_with_params(layout, options)
111
+ options = merge_options(options)
112
+ width = get_width(options, layout)
113
+ height = get_height(options, layout)
114
+ orientation = get_orientation(options, layout)
115
+ my_layout = layout[:layout_class].new(self.activity)
116
+ layout_params = layout[:params_class].new(width, height)
117
+ layout_params.weight = options[:weight] if layout[:layout_sym] == :linear
118
+ my_layout.setLayoutParams(layout_params)
119
+ my_layout.setOrientation(orientation) if layout[:layout_sym] == :linear
120
+ my_layout.setWeightSum(options[:weight_sum]) if layout[:layout_sym] == :linear
121
+ my_layout
122
+ end
123
+
124
+ def create_view_layout_params(view, layout, options)
125
+ options = merge_options(options)
126
+ width = get_width(options, layout)
127
+ height = get_height(options, layout)
128
+ layout_params = layout[:params_class].new(width, height)
129
+ layout_params.weight = options[:weight]
130
+ view.setText(options[:text]) unless options[:text].nil?
131
+ view.setLayoutParams(layout_params)
132
+ view.onClickListener = AQClickListener.new(self.activity, options) if options[:click]
133
+ view.setId(options[:id]) if options[:id]
134
+ layout[:layout].addView(view)
135
+ view
136
+ end
137
+
138
+ def find(view_id)
139
+ self.activity.findViewById(view_id)
140
+ end
141
+
142
+ def toast(text, options = {})
143
+ options = {
144
+ gravity: :bottom,
145
+ length: :short
146
+ }.merge(options)
147
+
148
+ gravity_options = {
149
+ top: Android::View::Gravity::TOP,
150
+ left: Android::View::Gravity::LEFT,
151
+ right: Android::View::Gravity::RIGHT,
152
+ bottom: Android::View::Gravity::BOTTOM,
153
+ center: Android::View::Gravity::CENTER,
154
+ }
155
+
156
+ length_options = {
157
+ short: Android::Widget::Toast::LENGTH_SHORT,
158
+ long: Android::Widget::Toast::LENGTH_LONG,
159
+ }
160
+
161
+ the_toast = Android::Widget::Toast.makeText(self.activity, text, length_options[options[:length]])
162
+ the_toast.setGravity(gravity_options[options[:gravity]], 0, 0)
163
+ the_toast.show
164
+ end
165
+ end
166
+
167
+ class AQClickListener
168
+ attr_accessor :activity, :options
169
+
170
+ def initialize(activity, options)
171
+ self.activity = activity
172
+ self.options = options
173
+ end
174
+
175
+ def onClick(view)
176
+ self.activity.send(self.options[:click], view)
177
+ end
178
+ end
@@ -0,0 +1,3 @@
1
+ module AndroidQuery
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+
3
+ unless defined?(Motion::Project::Config)
4
+ raise "This gem works only within a RubyMotion android project."
5
+ end
6
+
7
+ lib_dir_path = File.dirname(File.expands_path(__FILE__))
8
+
9
+ Motion::Project::App.setup do |app|
10
+ app.files.unshift(Dir.glob(File.join(lib_dir_path, "android_query/**/*.rb")))
11
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: android_query
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Abdullah Esmail
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: This gem was inspired by the rmq gem for iOS
42
+ email:
43
+ - abdullah.esmail@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - README.md
49
+ - lib/android_query.rb
50
+ - lib/android_query/android_query.rb
51
+ - lib/android_query/version.rb
52
+ homepage: https://github.com/aesmail/android-query
53
+ licenses:
54
+ - MIT
55
+ metadata: {}
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project:
72
+ rubygems_version: 2.6.11
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Making android development easy and enjoyable
76
+ test_files: []