android_motion_query 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3835347be88f8b42c279a29b9b446338dfbc29e
4
- data.tar.gz: deae968ca52cb5b0b2e9a3dcd0035b8e7a46cb68
3
+ metadata.gz: a229c9f9b35ef709975966d4a4527a28e2179a3f
4
+ data.tar.gz: 98375db35f31a7a8f65b23580dda5044adcfa3ce
5
5
  SHA512:
6
- metadata.gz: c023102ff26902db3704a7fbd01eeded609b615e9aacb79813a77848024158983e76d707494ee7f1be961bd4def3c0bf5c49e6ef18c720033bf6c176ccaa0629
7
- data.tar.gz: 2ecccde46ba389558abbfa07b749dcf5d95721420fb22cb244addc4c5e1f4d7588aa72609d8ac63410975a9a7bc7acf2f4cd6135b70616649205c75308a5187e
6
+ metadata.gz: 713f5b2fdee999eb6e40eeabed41e3d58b6f221022683b321eabf82d5aed11261cf583bf18de9584e1dcc3bb889526c647af4e1151f740b6d78b6b3630b26d34
7
+ data.tar.gz: eae6dc3aec88c7bf4992f701f7fbb513b14aed2403ba6ed2188f733f2f305a4bcdd636e84b1ff9370d6520eeb4991960ded54aa4c32a92a2732e54f1adc0f8a3
data/README.md CHANGED
@@ -13,7 +13,7 @@ If you don't like dealing with XML layouts and long method names, `android_motio
13
13
  Add this line to your application's Gemfile:
14
14
 
15
15
  ```ruby
16
- gem 'android_motion_query', '~> 0.1.0'
16
+ gem 'android_motion_query', '~> 0.2.0'
17
17
  ```
18
18
 
19
19
  And then execute:
@@ -27,15 +27,15 @@ Or install it yourself as:
27
27
  ## Usage
28
28
 
29
29
  The general rule is to create a top-level layout and add views to it.
30
- Each view accepts a style method.
30
+ Each view accepts a style name as an argument.
31
31
 
32
32
  #### Tiny Example:
33
33
 
34
34
  To create a LinearLayout and add a TextView widget to it:
35
35
 
36
36
  ```ruby
37
- amq.linear_layout(:layout_style) do |my_layout|
38
- my_layout.text_view(:some_information)
37
+ amq.add(:linear_layout, :layout_style) do |my_layout|
38
+ my_layout.add(:text_view, :some_information)
39
39
  end
40
40
  ```
41
41
 
@@ -43,7 +43,7 @@ The style for the LinearLayout is `:layout_style` and the TextView has a `:some_
43
43
 
44
44
  How do you define styles?
45
45
 
46
- Styles are defined in a separate class that inherit from `AndroidMotionQuery::Stylesheet`.
46
+ Styles are defined in a separate class that inherits from `AMQStylesheet`.
47
47
 
48
48
  Each style is passed a wrapper of the android view:
49
49
 
@@ -68,110 +68,124 @@ end
68
68
 
69
69
  #### Complete Example:
70
70
 
71
- ```ruby
72
- class MainActivity < AMQScreen
73
- def on_create(saved_state)
74
- amq.stylesheet = HomeStyle
75
- amq.linear_layout(:top_layout) do |top|
76
- top.image_button(:bench_button)
77
- top.image_button(:flower_button)
78
- top.linear_layout(:directions) do |direction_layout|
79
- direction_layout.text_view(:left_text)
80
- direction_layout.button(:right_button)
81
- end
82
- end
83
- end
84
-
85
- def coffee_message(view)
86
- amq.toast('This is a message for COFFEE LOVERS :)', gravity: :center)
87
- end
88
-
89
- def random_thing(view)
90
- puts "This should be printed when I click the button"
91
- end
92
-
93
- def another_toast(view)
94
- amq.toast("This is a purple", gravity: :top_right, length: :long)
95
- end
96
- end
97
- ```
98
-
99
- The previous code produces the following app:
71
+ This code creates the following simple calculator app:
100
72
 
101
73
  ![Sample Screenshot](screenshot.png)
102
74
 
103
-
104
- The following is the `HomeStyle` class that styles the screen:
105
75
  ```ruby
106
- class HomeStyle < AMQStylesheet
107
- def top_layout(st)
108
- st.width = :mp
109
- st.height = 0
110
- st.weight_sum = 4
111
- st.orientation = :vertical
112
- st.background_color = '#A87E54'
76
+ class CalculatorScreen < AMQScreen
77
+ def on_create(state)
78
+ setup_calculator_variables
79
+ amq.stylesheet = CalculatorStyle
80
+ amq.add(:linear_layout, :top_layout) do |top|
81
+ @result_label = top.add(:text_view, :result_label)
82
+ top.add(:linear_layout, :buttons_layout) do |bottom|
83
+ bottom.add(:linear_layout, :row_layout) do |row|
84
+ row.add(:button, :ac).tap { reset_calculator }
85
+ row.add(:button, :plus_minus).tap { amq.toast('This is not supported yet') }
86
+ row.add(:button, :percentage).tap { amq.toast('This is not supported yet') }
87
+ row.add(:button, :division).tap { save_result_with_operation(:div) }
88
+ end
89
+
90
+ bottom.add(:linear_layout, :row_layout) do |row|
91
+ row.add(:button, :seven).tap { add_digit('7') }
92
+ row.add(:button, :eight).tap { add_digit('8') }
93
+ row.add(:button, :nine).tap { add_digit('9') }
94
+ row.add(:button, :multiplication).tap { save_result_with_operation(:mul) }
95
+ end
96
+
97
+ bottom.add(:linear_layout, :row_layout) do |row|
98
+ row.add(:button, :four).tap { add_digit('4') }
99
+ row.add(:button, :five).tap { add_digit('5') }
100
+ row.add(:button, :six).tap { add_digit('6') }
101
+ row.add(:button, :minus).tap { save_result_with_operation(:min) }
102
+ end
103
+
104
+ bottom.add(:linear_layout, :row_layout) do |row|
105
+ row.add(:button, :one).tap { add_digit('1') }
106
+ row.add(:button, :two).tap { add_digit('2') }
107
+ row.add(:button, :three).tap { add_digit('3') }
108
+ row.add(:button, :plus).tap { save_result_with_operation(:add) }
109
+ end
110
+
111
+ bottom.add(:linear_layout, :row_layout) do |row|
112
+ row.add(:button, :zero).tap { add_digit('0') }
113
+ row.add(:button, :decimal_point).tap { add_decimal }
114
+ row.add(:button, :equals).tap { calculate_result }
115
+ end
116
+ end
117
+ end
113
118
  end
114
119
 
115
- def bench_button(st)
116
- st.width = :mp
117
- st.margin_top = 10
118
- st.margin_bottom = 10
119
- st.background_image = 'bench' # <-- image is resources/drawable/bench.png
120
- st.click = :coffee_message
121
- shared_button_styles(st)
120
+ def setup_calculator_variables
121
+ @start_new_number = true
122
+ @first_number = 0
123
+ @result = 0
124
+ @operation = nil
122
125
  end
123
126
 
124
- def flower_button(st)
125
- st.width = :mp
126
- st.background_image = 'flower'
127
- st.click = :random_thing
128
- shared_button_styles(st)
127
+ def add_digit(digit)
128
+ @result_label.text = '' if @start_new_number
129
+ display = @result_label.text + digit
130
+ if display['.']
131
+ display = display.to_f unless digit == '0'
132
+ else
133
+ display = display.to_i
134
+ end
135
+ @result_label.text = display.to_s
136
+ @start_new_number = false
129
137
  end
130
138
 
131
- def shared_button_styles(st)
132
- st.height = 0
133
- st.padding = 0
134
- st.margin_left = 10
135
- st.margin_right = 10
136
- st.scale_type = :fit_xy
137
- st.weight = 1.5
139
+ def add_decimal
140
+ display = @result_label.text
141
+ @result_label.text = display + '.'
138
142
  end
139
143
 
140
- def directions(st)
141
- st.orientation = :horizontal
142
- st.weight = 1
143
- st.weight_sum = 2
144
- st.width = :mp
145
- st.height = 0
146
- st.margin_top = 10
144
+ def reset_calculator
145
+ @result_label.text = '0'
146
+ @result = 0
147
+ @first_number = 0
148
+ @start_new_number = true
149
+ @operation = nil
147
150
  end
148
151
 
149
- def left_text(st)
150
- st.weight = 1
151
- st.text = 'android_query is AWESOME!'
152
- st.text_alignment = :center
152
+ def save_result_with_operation(op)
153
+ display = @result_label.text
154
+ @first_number = display.to_f
155
+ @operation = op
156
+ @start_new_number = true
153
157
  end
154
158
 
155
- def right_button(st)
156
- st.weight = 1
157
- st.text = 'Click Me'
158
- st.click = :another_toast
159
- st.background_color = '#927FD5'
160
- st.text_color = :white
159
+ def calculate_result
160
+ display = @result_label.text.to_f
161
+ case @operation
162
+ when :add
163
+ @result = @first_number + display
164
+ when :min
165
+ @result = @first_number - display
166
+ when :mul
167
+ @result = @first_number * display
168
+ when :div
169
+ @result = @first_number / display
170
+ end
171
+ @result_label.text = @result.to_s
161
172
  end
162
173
  end
163
174
  ```
164
175
 
176
+ Please check the `example` folder for the complete calculator app code.
177
+
178
+
165
179
  ## Todo List
166
180
  - [ ] Refactor - create more "single responsibility" classes and have smaller functions (this will never be "done", it's just here as a constant reminder)
167
181
  - [ ] Set automatic IDs for views
168
182
  - [ ] Add wrappers for all built-in android widgets (currently android_query supports 5 widgets)
169
183
  - [x] Add support for LinearLayouts
170
184
  - [ ] Add support for RelativeLayouts
171
- - [ ] Add support for FrameLayouts
185
+ - [x] Add support for FrameLayouts
172
186
  - [ ] Add support for AbsoluteLayouts (worth it? AbsoluteLayout is deprecated a long time ago)
173
- - [x] Add support for working with custom widgets/views (throught `aqv.new_view()`)
174
- - [ ] Add support for `view.click { block of code }`
187
+ - [x] Add support for working with custom widgets/views (through `amq.new_view()`)
188
+ - [x] Add support for `amq.tap { block of code }` for `onClickListener` events
175
189
  - [ ] Add support for @string values (strings.xml)
176
190
  - [x] Add support for @drawable values (images in the resources/drawable directory)
177
191
  - [ ] Add support for easy and quick animations
@@ -1,9 +1,11 @@
1
1
  class AMQAdapter < Android::Widget::BaseAdapter
2
- attr_accessor :mContext, :items
2
+ attr_accessor :context, :items, :view_block
3
3
 
4
- def initialize(context, list, options={})
5
- self.mContext = context
4
+ def initialize(context, list, &block)
5
+ self.context = context
6
6
  self.items = list
7
+ self.view_block = block if block_given?
8
+ self
7
9
  end
8
10
 
9
11
  def getCount
@@ -19,8 +21,16 @@ class AMQAdapter < Android::Widget::BaseAdapter
19
21
  end
20
22
 
21
23
  def getView(position, convert_view, parent)
22
- text_view = Android::Widget::TextView.new(self.mContext)
23
- text_view.text = self.items[position]
24
- text_view
24
+ self.custom_view(position, convert_view, parent, &self.view_block)
25
+ end
26
+
27
+ def custom_view(position, convert_view, parent, &block)
28
+ if block_given?
29
+ block.call(self.items[position], position)
30
+ else
31
+ text_view = Android::Widget::TextView.new(self.context)
32
+ text_view.text = self.items[position]
33
+ text_view
34
+ end
25
35
  end
26
36
  end
@@ -16,12 +16,24 @@ class AndroidMotionQuery
16
16
  self.stylesheet.apply_style_for(self.root, style_method, layout_params)
17
17
  block.call(self.root) if block_given?
18
18
  self.activity.setContentView(self.root.get)
19
+ self
20
+ end
21
+
22
+ def create_standalone_amq_view(view, style_method, layout_params, options = {}, &block)
23
+ amq_view = AMQView.new(view, self.activity, self.stylesheet, style_method, layout_params, options)
24
+ self.stylesheet.apply_style_for(amq_view, style_method, layout_params)
25
+ block.call(amq_view) if block_given?
26
+ amq_view
19
27
  end
20
28
 
21
29
  def find(id)
22
30
  self.root.get.findViewById(id).tag
23
31
  end
24
32
 
33
+ def add(view_sym, style, &block)
34
+ self.send(view_sym, style, &block)
35
+ end
36
+
25
37
  def linear_layout(style_method, &block)
26
38
  view = Android::Widget::LinearLayout.new(self.activity)
27
39
  layout_params = Android::Widget::LinearLayout::LayoutParams
@@ -30,10 +42,22 @@ class AndroidMotionQuery
30
42
 
31
43
  def relative_layout(style_method, &block)
32
44
  view = Android::Widget::RelativeLayout.new(self.activity)
33
- layout_params = Android::Widget::RelativeLayout::Params
45
+ layout_params = Android::Widget::RelativeLayout::LayoutParams
34
46
  create_android_query_view(view, style_method, layout_params, {}, &block)
35
47
  end
36
48
 
49
+ def frame_layout(style_method, &block)
50
+ view = Android::Widget::FrameLayout.new(self.activity)
51
+ layout_params = Android::Widget::FrameLayout::LayoutParams
52
+ create_android_query_view(view, style_method, layout_params, {}, &block)
53
+ end
54
+
55
+ def text_view(style_method, &block)
56
+ view = Android::Widget::TextView.new(self.activity)
57
+ layout_params = Android::Widget::LinearLayout::LayoutParams
58
+ create_standalone_amq_view(view, style_method, layout_params, {}, &block)
59
+ end
60
+
37
61
  def toast(text, options = {})
38
62
  options = {
39
63
  gravity: :bottom,
@@ -9,3 +9,18 @@ class AMQClickListener
9
9
  self.activity.send(self.method_name.to_s, view)
10
10
  end
11
11
  end
12
+
13
+
14
+ class AMQTapListener
15
+ attr_accessor :activity, :amq, :callback
16
+ def initialize(activity, amq, &block)
17
+ self.activity = activity
18
+ self.callback = block
19
+ self.amq = amq
20
+ self
21
+ end
22
+
23
+ def onClick(view)
24
+ self.callback.call(view)
25
+ end
26
+ end
@@ -1,5 +1,6 @@
1
1
  class AMQScreen < Android::App::Activity
2
- attr_accessor :amq
2
+ attr_accessor :amq, :extras
3
+
3
4
  def onCreate(savedInstance)
4
5
  super
5
6
  self.create_amq_object
@@ -10,18 +11,19 @@ class AMQScreen < Android::App::Activity
10
11
  self.amq = AndroidMotionQuery.new(self)
11
12
  end
12
13
 
13
- def open(screen, extra={})
14
+ def open_screen(screen, extra_data={})
14
15
  intent = Android::Content::Intent.new(self, screen)
15
- extra.each {|k, v| intent.putExtra(k.to_s, v) }
16
+ extra_data.each do |k, v|
17
+ intent.putExtra(k.to_s, v)
18
+ end
16
19
  startActivity(intent)
17
20
  end
18
21
 
19
- def extras
20
- # TODO implement a way to get information from the putExtra() method
21
- # puts self.getIntent.getExtras
22
- # if k
23
- # package_name = self.getPackageName
24
- # self.getExtras
25
- # self.getExtras
22
+ def extra(key)
23
+ data = getIntent.getExtra(key.to_s)
24
+ if data.nil?
25
+ puts "WARNING: The extra data (#{key.to_s}) you are trying to get is nil"
26
+ end
27
+ data
26
28
  end
27
29
  end
@@ -1,4 +1,67 @@
1
+ # TYPE_FACE = Android::Graphics::TypeFace
2
+ # TYPE_FACE_OPTIONS = {
3
+ # normal: TYPE_FACE::Create("sans-serif", TYPE_FACE::NORMAL),
4
+ # normal_bold: TYPE_FACE::Create("sans-serif", TYPE_FACE::BOLD),
5
+ # light: TYPE_FACE::Create("sans-serif-light", TYPE_FACE::NORMAL),
6
+ # light_bold: TYPE_FACE::Create("sans-serif-light", TYPE_FACE::BOLD),
7
+ # condensed: TYPE_FACE::Create("sans-serif-condensed", TYPE_FACE::NORMAL),
8
+ # condensed_bold: TYPE_FACE::Create("sans-serif-condensed", TYPE_FACE::BOLD),
9
+ # }
10
+
11
+ VIEW_GROUP_PARAMS = Android::View::ViewGroup::LayoutParams
12
+ LAYOUT_SIZE_OPTIONS = {
13
+ mp: VIEW_GROUP_PARAMS::MATCH_PARENT,
14
+ wc: VIEW_GROUP_PARAMS::WRAP_CONTENT,
15
+ }
16
+
17
+ LINEAR_LAYOUT = Android::Widget::LinearLayout
18
+ ORIENTATION_OPTIONS = {
19
+ vertical: LINEAR_LAYOUT::VERTICAL,
20
+ horizontal: LINEAR_LAYOUT::HORIZONTAL,
21
+ }
22
+
23
+ SCALE_TYPE = Android::Widget::ImageView::ScaleType
24
+ SCALE_TYPES = {
25
+ center: SCALE_TYPE::CENTER,
26
+ center_crop: SCALE_TYPE::CENTER_CROP,
27
+ center_inside: SCALE_TYPE::CENTER_INSIDE,
28
+ fit_center: SCALE_TYPE::FIT_CENTER,
29
+ fit_end: SCALE_TYPE::FIT_END,
30
+ fit_start: SCALE_TYPE::FIT_START,
31
+ fit_xy: SCALE_TYPE::FIT_XY,
32
+ matrix: SCALE_TYPE::MATRIX,
33
+ }
34
+
1
35
  INPUT_TYPE = Android::Text::InputType
36
+ INPUT_TYPES = {
37
+ normal: INPUT_TYPE::TYPE_CLASS_TEXT,
38
+ password: INPUT_TYPE::TYPE_CLASS_TEXT | INPUT_TYPE::TYPE_TEXT_VARIATION_PASSWORD,
39
+ visible_password: INPUT_TYPE::TYPE_CLASS_TEXT | INPUT_TYPE::TYPE_TEXT_VARIATION_VISIBLE_PASSWORD,
40
+ number: INPUT_TYPE::TYPE_CLASS_NUMBER,
41
+ email: INPUT_TYPE::TYPE_CLASS_TEXT | INPUT_TYPE::TYPE_TEXT_VARIATION_EMAIL_ADDRESS,
42
+ phone: INPUT_TYPE::TYPE_CLASS_PHONE,
43
+ date: INPUT_TYPE::TYPE_CLASS_DATETIME | INPUT_TYPE::TYPE_DATETIME_VARIATION_DATE,
44
+ time: INPUT_TYPE::TYPE_CLASS_DATETIME | INPUT_TYPE::TYPE_DATETIME_VARIATION_TIME,
45
+ datetime: INPUT_TYPE::TYPE_CLASS_DATETIME,
46
+ }
47
+
48
+ GRAVITY = Android::View::Gravity
49
+ GRAVITY_OPTIONS = {
50
+ top: GRAVITY::TOP,
51
+ left: GRAVITY::LEFT,
52
+ right: GRAVITY::RIGHT,
53
+ bottom: GRAVITY::BOTTOM,
54
+ center: GRAVITY::CENTER,
55
+ center_horizontal: GRAVITY::CENTER_HORIZONTAL,
56
+ center_vertical: GRAVITY::CENTER_VERTICAL,
57
+ bottom_right: GRAVITY::BOTTOM | GRAVITY::RIGHT,
58
+ bottom_left: GRAVITY::BOTTOM | GRAVITY::LEFT,
59
+ center_right: GRAVITY::CENTER | GRAVITY::RIGHT,
60
+ center_left: GRAVITY::CENTER | GRAVITY::LEFT,
61
+ top_right: GRAVITY::TOP | GRAVITY::RIGHT,
62
+ top_left: GRAVITY::TOP | GRAVITY::LEFT,
63
+ }
64
+
2
65
 
3
66
  class AMQStylesheet
4
67
  def apply_style_for(view, style_name, layout_params)
@@ -15,19 +78,9 @@ end
15
78
  class AMQStylesheetElement
16
79
  attr_accessor :view, :params, :radius
17
80
 
18
- LAYOUT_SIZE_OPTIONS = {
19
- mp: Android::View::ViewGroup::LayoutParams::MATCH_PARENT,
20
- wc: Android::View::ViewGroup::LayoutParams::WRAP_CONTENT,
21
- }
22
-
23
- ORIENTATION_OPTIONS = {
24
- vertical: Android::Widget::LinearLayout::VERTICAL,
25
- horizontal: Android::Widget::LinearLayout::HORIZONTAL,
26
- }
27
-
28
81
  def initialize(view, layout_params)
29
82
  self.view = view
30
- self.params = layout_params.new(LAYOUT_SIZE_OPTIONS[:mp], LAYOUT_SIZE_OPTIONS[:wc])
83
+ self.params = layout_params.new(LAYOUT_SIZE_OPTIONS[:mp], LAYOUT_SIZE_OPTIONS[:mp])
31
84
  self
32
85
  end
33
86
 
@@ -38,6 +91,7 @@ class AMQStylesheetElement
38
91
 
39
92
  def text=(t)
40
93
  self.view.get.text = t
94
+ self
41
95
  end
42
96
 
43
97
  def width=(w)
@@ -181,28 +235,27 @@ class AMQStylesheetElement
181
235
  # result
182
236
  # end
183
237
 
238
+ def border_color=(color)
239
+ shape = Android::Graphics::Drawable::ShapeDrawable.new
240
+ shape.shape = Android::Graphics::Drawable::Shapes::RectShape.new
241
+ shape.paint.color = AMQColor.parse_color(color.to_s)
242
+ shape.paint.strokeWidth = 1
243
+ shape.paint.style = Android::Graphics::Paint::Style::STROKE
244
+ self.view.get.background = shape
245
+ end
246
+
184
247
  def background_color=(color)
185
248
  self.view.get.backgroundColor = AMQColor.parse_color(color.to_s)
186
249
  end
187
250
 
188
- def background_image=(image_name)
251
+ def image=(image_name)
189
252
  context = self.view.get.getContext
190
253
  resource_id = context.getResources.getIdentifier(image_name, "drawable", context.getPackageName)
191
254
  self.view.get.setImageResource(resource_id)
192
255
  end
193
256
 
194
257
  def scale_type=(option)
195
- scale_types = {
196
- center: Android::Widget::ImageView::ScaleType::CENTER,
197
- center_crop: Android::Widget::ImageView::ScaleType::CENTER_CROP,
198
- center_inside: Android::Widget::ImageView::ScaleType::CENTER_INSIDE,
199
- fit_center: Android::Widget::ImageView::ScaleType::FIT_CENTER,
200
- fit_end: Android::Widget::ImageView::ScaleType::FIT_END,
201
- fit_start: Android::Widget::ImageView::ScaleType::FIT_START,
202
- fit_xy: Android::Widget::ImageView::ScaleType::FIT_XY,
203
- matrix: Android::Widget::ImageView::ScaleType::MATRIX,
204
- }
205
- self.view.get.scaleType = scale_types[option]
258
+ self.view.get.scaleType = SCALE_TYPES[option]
206
259
  end
207
260
 
208
261
  def text_alignment=(alignment)
@@ -213,22 +266,22 @@ class AMQStylesheetElement
213
266
  self.view.get.textColor = AMQColor.parse_color(color.to_s)
214
267
  end
215
268
 
269
+ def text_size=(size)
270
+ self.view.get.textSize = size
271
+ end
272
+
273
+ # def font=(font)
274
+ # if TYPE_FACE_OPTIONS.keys.include? font
275
+ # self.view.get.typeFace = TYPE_FACE_OPTIONS[font]
276
+ # else
277
+ # raise "The value #{font} is not a supported font value. Use one of #{TYPE_FACE_OPTIONS.keys}"
278
+ # end
279
+ # end
280
+
216
281
  def hint=(t)
217
282
  self.view.get.hint = t
218
283
  end
219
284
 
220
- INPUT_TYPES = {
221
- normal: INPUT_TYPE::TYPE_CLASS_TEXT,
222
- password: INPUT_TYPE::TYPE_CLASS_TEXT | INPUT_TYPE::TYPE_TEXT_VARIATION_PASSWORD,
223
- visible_password: INPUT_TYPE::TYPE_CLASS_TEXT | INPUT_TYPE::TYPE_TEXT_VARIATION_VISIBLE_PASSWORD,
224
- number: INPUT_TYPE::TYPE_CLASS_NUMBER,
225
- email: INPUT_TYPE::TYPE_CLASS_TEXT | INPUT_TYPE::TYPE_TEXT_VARIATION_EMAIL_ADDRESS,
226
- phone: INPUT_TYPE::TYPE_CLASS_PHONE,
227
- date: INPUT_TYPE::TYPE_CLASS_DATETIME | INPUT_TYPE::TYPE_DATETIME_VARIATION_DATE,
228
- time: INPUT_TYPE::TYPE_CLASS_DATETIME | INPUT_TYPE::TYPE_DATETIME_VARIATION_TIME,
229
- datetime: INPUT_TYPE::TYPE_CLASS_DATETIME,
230
- }
231
-
232
285
  def input_type=(text_type)
233
286
  if INPUT_TYPES.keys.include? text_type
234
287
  self.view.get.inputType = INPUT_TYPES[text_type]
@@ -238,21 +291,6 @@ class AMQStylesheetElement
238
291
  end
239
292
  end
240
293
 
241
- GRAVITY = Android::View::Gravity
242
- GRAVITY_OPTIONS = {
243
- top: GRAVITY::TOP,
244
- left: GRAVITY::LEFT,
245
- right: GRAVITY::RIGHT,
246
- bottom: GRAVITY::BOTTOM,
247
- center: GRAVITY::CENTER,
248
- bottom_right: GRAVITY::BOTTOM | GRAVITY::RIGHT,
249
- bottom_left: GRAVITY::BOTTOM | GRAVITY::LEFT,
250
- center_right: GRAVITY::CENTER | GRAVITY::RIGHT,
251
- center_left: GRAVITY::CENTER | GRAVITY::LEFT,
252
- top_right: GRAVITY::TOP | GRAVITY::RIGHT,
253
- top_left: GRAVITY::TOP | GRAVITY::LEFT,
254
- }
255
-
256
294
  def gravity=(alignment)
257
295
  if GRAVITY_OPTIONS.keys.include? alignment
258
296
  self.view.get.gravity = GRAVITY_OPTIONS[alignment]
@@ -261,4 +299,13 @@ class AMQStylesheetElement
261
299
  self.gravity = :center
262
300
  end
263
301
  end
302
+
303
+ def layout_gravity=(alignment)
304
+ if GRAVITY_OPTIONS.keys.include? alignment
305
+ self.params.gravity = GRAVITY_OPTIONS[alignment]
306
+ else
307
+ puts "The value #{alignment} is not a supported gravity value. Defaulting to center."
308
+ self.params.gravity = :center
309
+ end
310
+ end
264
311
  end
@@ -1,3 +1,3 @@
1
1
  module AndroidQuery
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -14,7 +14,7 @@ class AMQView
14
14
 
15
15
  # convenience methods
16
16
  def id; get.id end
17
- def id=(vid); get.id = vid end
17
+ def id=(vid); get.id = vid; self end
18
18
  def get; self.view end
19
19
  def left; get.getLeft end
20
20
  def right; get.getRight end
@@ -24,7 +24,12 @@ class AMQView
24
24
  def height; get.getHeight end
25
25
  def text; get.text end
26
26
  def text=(t); get.text = t end
27
-
27
+ def data(t); get.text = t; self end
28
+ def tap(&block)
29
+ self.get.onClickListener = AMQTapListener.new(self.activity, self, &block)
30
+ self
31
+ end
32
+
28
33
  def create_android_query_view(view, style_method, layout_params, options = {}, &block)
29
34
  aqv = AMQView.new(view, self.activity, self.stylesheet, style_method, layout_params, options)
30
35
  self.stylesheet.apply_style_for(aqv, style_method, layout_params)
@@ -33,11 +38,27 @@ class AMQView
33
38
  aqv
34
39
  end
35
40
 
41
+ def add(view_sym, style, &block)
42
+ self.send(view_sym, style, &block)
43
+ end
44
+
36
45
  def linear_layout(style_method, &block)
37
46
  view = Android::Widget::LinearLayout.new(self.activity)
38
47
  lp = Android::Widget::LinearLayout::LayoutParams
39
48
  create_android_query_view(view, style_method, lp, {}, &block)
40
49
  end
50
+
51
+ def relative_layout(style_method, &block)
52
+ view = Android::Widget::RelativeLayout.new(self.activity)
53
+ lp = Android::Widget::RelativeLayout::LayoutParams
54
+ create_android_query_view(view, style_method, lp, {}, &block)
55
+ end
56
+
57
+ def frame_layout(style_method, &block)
58
+ view = Android::Widget::FrameLayout.new(self.activity)
59
+ lp = Android::Widget::FrameLayout::LayoutParams
60
+ create_android_query_view(view, style_method, lp, {}, &block)
61
+ end
41
62
 
42
63
  def text_view(style_method, &block)
43
64
  view = Android::Widget::TextView.new(self.activity)
@@ -65,10 +86,16 @@ class AMQView
65
86
  end
66
87
 
67
88
  def grid_view(style_method, &block)
68
- view = Android::Widget::GridView.new(self)
89
+ view = Android::Widget::GridView.new(self.activity)
69
90
  new_view(view, style_method, &block)
70
91
  end
71
92
 
93
+ def adapter(list, &block)
94
+ # this method has to be called from a grid_view or similar views (which accept adapters)
95
+ self.get.adapter = AMQAdapter.new(self.activity, list, &block)
96
+ self
97
+ end
98
+
72
99
  def new_view(view, style_method, &block)
73
100
  create_android_query_view(view, style_method, self.layout_params, {}, &block)
74
101
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: android_motion_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdullah Esmail
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-08 00:00:00.000000000 Z
11
+ date: 2017-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -42,7 +42,7 @@ files:
42
42
  - lib/android_motion_query/stylesheet.rb
43
43
  - lib/android_motion_query/version.rb
44
44
  - lib/android_motion_query/views.rb
45
- homepage: https://github.com/aesmail/android-query
45
+ homepage: https://github.com/aesmail/android-motion-query
46
46
  licenses:
47
47
  - MIT
48
48
  metadata: {}