android_motion_query 0.1.0 → 0.2.1

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.
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: {}