bluepotion 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +10 -0
- data/lib/bluepotion.rb +16 -0
- data/lib/project/ext/activity.rb +62 -0
- data/lib/project/ext/array_list.rb +25 -0
- data/lib/project/ext/fragment.rb +2 -0
- data/lib/project/ext/object.rb +105 -0
- data/lib/project/ext/string.rb +23 -0
- data/lib/project/ext/view.rb +81 -0
- data/lib/project/potion.rb +50 -0
- data/lib/project/pro_motion/pm_activity.rb +38 -0
- data/lib/project/pro_motion/pm_application.rb +71 -0
- data/lib/project/pro_motion/pm_home_activity.rb +14 -0
- data/lib/project/pro_motion/pm_screen.rb +67 -0
- data/lib/project/pro_motion/pm_screen_module.rb +165 -0
- data/lib/project/pro_motion/pm_single_fragment_activity.rb +31 -0
- data/lib/project/ruby_motion_query/rmq/actions.rb +48 -0
- data/lib/project/ruby_motion_query/rmq/base.rb +260 -0
- data/lib/project/ruby_motion_query/rmq/data.rb +64 -0
- data/lib/project/ruby_motion_query/rmq/debug.rb +9 -0
- data/lib/project/ruby_motion_query/rmq/enumerablish.rb +99 -0
- data/lib/project/ruby_motion_query/rmq/events.rb +28 -0
- data/lib/project/ruby_motion_query/rmq/factory.rb +47 -0
- data/lib/project/ruby_motion_query/rmq/position.rb +2 -0
- data/lib/project/ruby_motion_query/rmq/selectors.rb +72 -0
- data/lib/project/ruby_motion_query/rmq/styles.rb +108 -0
- data/lib/project/ruby_motion_query/rmq/subviews.rb +95 -0
- data/lib/project/ruby_motion_query/rmq/tags.rb +58 -0
- data/lib/project/ruby_motion_query/rmq/traverse.rb +287 -0
- data/lib/project/ruby_motion_query/rmq/utils.rb +36 -0
- data/lib/project/ruby_motion_query/rmq/version.rb +6 -0
- data/lib/project/ruby_motion_query/rmq_activity_data.rb +3 -0
- data/lib/project/ruby_motion_query/rmq_app.rb +9 -0
- data/lib/project/ruby_motion_query/rmq_color.rb +121 -0
- data/lib/project/ruby_motion_query/rmq_device.rb +47 -0
- data/lib/project/ruby_motion_query/rmq_event.rb +1 -0
- data/lib/project/ruby_motion_query/rmq_font.rb +61 -0
- data/lib/project/ruby_motion_query/rmq_image.rb +55 -0
- data/lib/project/ruby_motion_query/rmq_rect.rb +576 -0
- data/lib/project/ruby_motion_query/rmq_screen_data.rb +3 -0
- data/lib/project/ruby_motion_query/rmq_stylesheet.rb +39 -0
- data/lib/project/ruby_motion_query/rmq_view_data.rb +88 -0
- data/lib/project/ruby_motion_query/stylers/rmq_button_styler.rb +3 -0
- data/lib/project/ruby_motion_query/stylers/rmq_image_button_styler.rb +3 -0
- data/lib/project/ruby_motion_query/stylers/rmq_image_view_styler.rb +24 -0
- data/lib/project/ruby_motion_query/stylers/rmq_linear_layout_styler.rb +32 -0
- data/lib/project/ruby_motion_query/stylers/rmq_relative_layout_styler.rb +7 -0
- data/lib/project/ruby_motion_query/stylers/rmq_styler_helper.rb +3 -0
- data/lib/project/ruby_motion_query/stylers/rmq_text_view_styler.rb +50 -0
- data/lib/project/ruby_motion_query/stylers/rmq_view_styler.rb +201 -0
- data/lib/project/version.rb +3 -0
- data/templates/screen/app/screens/name_screen.rb +20 -0
- data/templates/screen/app/stylesheets/name_screen_stylesheet.rb +24 -0
- data/templates/screen/spec/screens/name_screen_spec.rb +8 -0
- metadata +119 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
class RMQStylesheet
|
2
|
+
attr_accessor :controller
|
3
|
+
|
4
|
+
def initialize(controller)
|
5
|
+
unless RMQStylesheet.application_was_setup
|
6
|
+
RMQStylesheet.application_was_setup = true
|
7
|
+
application_setup
|
8
|
+
end
|
9
|
+
@controller = controller
|
10
|
+
setup
|
11
|
+
end
|
12
|
+
|
13
|
+
def application_setup
|
14
|
+
# Override to do your overall setup for your applications. This
|
15
|
+
# is where you want to add your custom fonts and colors
|
16
|
+
# This only gets called once
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup
|
20
|
+
# Override if you need to do setup in your specific stylesheet
|
21
|
+
end
|
22
|
+
|
23
|
+
def color(*params)
|
24
|
+
RMQ.color(*params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def font
|
28
|
+
rmq.font
|
29
|
+
end
|
30
|
+
|
31
|
+
def image
|
32
|
+
rmq.image
|
33
|
+
end
|
34
|
+
|
35
|
+
class << self
|
36
|
+
attr_accessor :application_was_setup
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
class RMQViewData
|
2
|
+
attr_accessor :events, :built, :is_screen_root_view, :activity, :screen
|
3
|
+
|
4
|
+
def screen_root_view?
|
5
|
+
!@is_screen_root_view.nil?
|
6
|
+
end
|
7
|
+
|
8
|
+
# @return [Hash] Array of tag names assigned to to this view
|
9
|
+
def tags
|
10
|
+
@_tags ||= {}
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [Array] Array of tag names assigned to to this view
|
14
|
+
def tag_names
|
15
|
+
tags.keys
|
16
|
+
end
|
17
|
+
|
18
|
+
# *Do not* use this, use {RMQ#tag} instead:
|
19
|
+
# @example
|
20
|
+
# rmq(my_view).tag(:foo)
|
21
|
+
def tag(*tag_or_tags)
|
22
|
+
tag_or_tags.flatten!
|
23
|
+
tag_or_tags = tag_or_tags.first if tag_or_tags.length == 1
|
24
|
+
|
25
|
+
if tag_or_tags.is_a?(Array)
|
26
|
+
tag_or_tags.each do |tag_name|
|
27
|
+
tags[tag_name] = 1
|
28
|
+
end
|
29
|
+
elsif tag_or_tags.is_a?(Hash)
|
30
|
+
tag_or_tags.each do |tag_name, tag_value|
|
31
|
+
tags[tag_name] = tag_value
|
32
|
+
end
|
33
|
+
elsif tag_or_tags.is_a?(Symbol)
|
34
|
+
tags[tag_or_tags] = 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# *Do not* use this, use {RMQ#untag} instead:
|
39
|
+
# @example
|
40
|
+
# rmq(my_view).untag(:foo, :bar)
|
41
|
+
# Do nothing if no tag supplied or tag not present
|
42
|
+
def untag(*tag_or_tags)
|
43
|
+
tag_or_tags.flatten.each do |tag_name|
|
44
|
+
tags.delete tag_name
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check if this view contains a specific tag
|
49
|
+
#
|
50
|
+
# @param tag_name name of tag to check
|
51
|
+
# @return [Boolean] true if this view has the tag provided
|
52
|
+
def has_tag?(tag_name = nil)
|
53
|
+
if tag_name
|
54
|
+
tags.include?(tag_name)
|
55
|
+
else
|
56
|
+
RMQ.is_blank?(@_tags)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def style_name
|
61
|
+
self.styles.first
|
62
|
+
end
|
63
|
+
|
64
|
+
# Sets first style name, this is only here for backwards compatibility and as
|
65
|
+
# a convenience method
|
66
|
+
def style_name=(value)
|
67
|
+
self.styles[0] = value
|
68
|
+
end
|
69
|
+
|
70
|
+
#view.rmq_data.styles
|
71
|
+
def styles
|
72
|
+
@_styles ||= []
|
73
|
+
end
|
74
|
+
|
75
|
+
#view.rmq_data.has_style?(:style_name_here)
|
76
|
+
def has_style?(name = nil)
|
77
|
+
if name
|
78
|
+
self.styles.include?(name)
|
79
|
+
else
|
80
|
+
RMQ.is_blank?(@_styles)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def validation_errors; @_validation_errors ||= {}; end
|
85
|
+
def validation_errors=(value); @_validation_errors = value; end
|
86
|
+
def validations; @_validations ||= []; end
|
87
|
+
def validations=(value); @_validations = value; end
|
88
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class RMQImageViewStyler < RMQViewStyler
|
2
|
+
|
3
|
+
def image_resource=(resource_id)
|
4
|
+
@view.imageResource = resource_id
|
5
|
+
end
|
6
|
+
alias_method :image=, :image_resource=
|
7
|
+
|
8
|
+
def adjust_view_bounds=(adjust_view_bounds)
|
9
|
+
@view.adjustViewBounds = adjust_view_bounds
|
10
|
+
end
|
11
|
+
|
12
|
+
def max_height=(max_height)
|
13
|
+
@view.maxHeight = dp2px(max_height)
|
14
|
+
end
|
15
|
+
|
16
|
+
def max_width=(max_width)
|
17
|
+
@view.maxWidth = dp2px(max_width)
|
18
|
+
end
|
19
|
+
|
20
|
+
def tint=(t)
|
21
|
+
@view.setColorFilter(convert_color(t))
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class RMQLinearLayoutStyler < RMQViewStyler
|
2
|
+
|
3
|
+
def weight_sum=(weight_sum)
|
4
|
+
@view.setWeightSum weight_sum
|
5
|
+
end
|
6
|
+
|
7
|
+
def orientation=(orientation)
|
8
|
+
@view.setOrientation convert_orientation(orientation)
|
9
|
+
end
|
10
|
+
|
11
|
+
def gravity=(gravity)
|
12
|
+
@view.gravity = convert_gravity(gravity)
|
13
|
+
end
|
14
|
+
|
15
|
+
def finalize
|
16
|
+
@view.setLayoutParams(layout_params)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def convert_orientation(orientation)
|
22
|
+
case orientation
|
23
|
+
when :horizontal
|
24
|
+
Android::Widget::LinearLayout::HORIZONTAL
|
25
|
+
when :vertical
|
26
|
+
Android::Widget::LinearLayout::VERTICAL
|
27
|
+
else
|
28
|
+
orientation
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class RMQTextViewStyler < RMQViewStyler
|
2
|
+
def text_size=(text_size)
|
3
|
+
@view.textSize = text_size
|
4
|
+
end
|
5
|
+
|
6
|
+
def font_family=(font_family)
|
7
|
+
@font_family = font_family
|
8
|
+
end
|
9
|
+
|
10
|
+
def text_style=(text_style)
|
11
|
+
@text_style =
|
12
|
+
case text_style.to_s.downcase
|
13
|
+
when "bold"
|
14
|
+
Android::Graphics::Typeface::BOLD
|
15
|
+
when "italic"
|
16
|
+
Android::Graphics::Typeface::ITALIC
|
17
|
+
when "bold italic"
|
18
|
+
Android::Graphics::Typeface::BOLD_ITALIC
|
19
|
+
when "normal"
|
20
|
+
Android::Graphics::Typeface::NORMAL
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def text_color=(text_color)
|
25
|
+
@view.textColor = convert_color(text_color)
|
26
|
+
end
|
27
|
+
def color=(text_color)
|
28
|
+
@view.textColor = convert_color(text_color)
|
29
|
+
end
|
30
|
+
|
31
|
+
def text=(text)
|
32
|
+
@view.text = text
|
33
|
+
end
|
34
|
+
|
35
|
+
def font=(rmq_font)
|
36
|
+
@view.setTypeface(rmq_font.to_typeface, rmq_font.sdk_text_style)
|
37
|
+
@view.textSize = rmq_font.size
|
38
|
+
end
|
39
|
+
|
40
|
+
def gravity=(gravity)
|
41
|
+
@view.gravity = convert_gravity(gravity)
|
42
|
+
end
|
43
|
+
|
44
|
+
def finalize
|
45
|
+
super
|
46
|
+
@text_style ||= Android::Graphics::Typeface::NORMAL
|
47
|
+
typeface = Android::Graphics::Typeface.create(@font_family, @text_style) if @font_family
|
48
|
+
@view.setTypeface(typeface, @text_style) # ok for typeface to be nil
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
class RMQViewStyler
|
2
|
+
attr_accessor :view
|
3
|
+
attr_accessor :context
|
4
|
+
attr_accessor :bg_color
|
5
|
+
attr_accessor :corner_radius
|
6
|
+
|
7
|
+
def initialize(view, context)
|
8
|
+
@view = view
|
9
|
+
@context = context
|
10
|
+
@bg_color = nil
|
11
|
+
@corner_radius = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def background_color=(color)
|
15
|
+
@view.backgroundColor = @bg_color = convert_color(color)
|
16
|
+
end
|
17
|
+
alias_method :backgroundColor=, :background_color=
|
18
|
+
|
19
|
+
def background_resource=(bg)
|
20
|
+
@view.backgroundResource = bg
|
21
|
+
end
|
22
|
+
|
23
|
+
def layout_width=(layout_width)
|
24
|
+
layout_params.width = convert_dimension_value(layout_width)
|
25
|
+
end
|
26
|
+
|
27
|
+
def layout_height=(layout_height)
|
28
|
+
layout_params.height = convert_dimension_value(layout_height)
|
29
|
+
end
|
30
|
+
|
31
|
+
def gravity=(gravity)
|
32
|
+
layout_params.gravity = convert_gravity(gravity)
|
33
|
+
end
|
34
|
+
|
35
|
+
def layout_center_in_parent=(center_in_parent)
|
36
|
+
center = center_in_parent ? Android::Widget::RelativeLayout::TRUE :
|
37
|
+
Android::Widget::RelativeLayout::FALSE
|
38
|
+
layout_params.addRule(Android::Widget::RelativeLayout::CENTER_IN_PARENT, center)
|
39
|
+
end
|
40
|
+
alias_method :layout_centerInParent=, :layout_center_in_parent=
|
41
|
+
|
42
|
+
def layout_center_vertical=(center_vertical)
|
43
|
+
center = center_vertical ? Android::Widget::RelativeLayout::TRUE :
|
44
|
+
Android::Widget::RelativeLayout::FALSE
|
45
|
+
layout_params.addRule(Android::Widget::RelativeLayout::CENTER_VERTICAL, center)
|
46
|
+
end
|
47
|
+
alias_method :layout_centerVertical=, :layout_center_in_parent=
|
48
|
+
|
49
|
+
def layout_align_parent_left=(left_in_parent)
|
50
|
+
left = left_in_parent ? Android::Widget::RelativeLayout::TRUE :
|
51
|
+
Android::Widget::RelativeLayout::FALSE
|
52
|
+
layout_params.addRule(Android::Widget::RelativeLayout::ALIGN_PARENT_LEFT, left)
|
53
|
+
end
|
54
|
+
alias_method :layout_alignParentLeft=, :layout_align_parent_left=
|
55
|
+
|
56
|
+
def layout_align_parent_right=(right_in_parent)
|
57
|
+
right = right_in_parent ? Android::Widget::RelativeLayout::TRUE :
|
58
|
+
Android::Widget::RelativeLayout::FALSE
|
59
|
+
layout_params.addRule(Android::Widget::RelativeLayout::ALIGN_PARENT_RIGHT, right)
|
60
|
+
end
|
61
|
+
alias_method :layout_alignParentRight=, :layout_align_parent_right=
|
62
|
+
|
63
|
+
def padding_left=(pad_left)
|
64
|
+
padding[:left] = dp2px(pad_left)
|
65
|
+
end
|
66
|
+
alias_method :paddingLeft=, :padding_left=
|
67
|
+
|
68
|
+
def padding_top=(pad_top)
|
69
|
+
padding[:top] = dp2px(pad_top)
|
70
|
+
end
|
71
|
+
alias_method :paddingTop=, :padding_top=
|
72
|
+
|
73
|
+
def padding_right=(pad_right)
|
74
|
+
padding[:right] = dp2px(pad_right)
|
75
|
+
end
|
76
|
+
alias_method :paddingRight=, :padding_right=
|
77
|
+
|
78
|
+
def padding_bottom=(pad_bottom)
|
79
|
+
padding[:bottom] = dp2px(pad_bottom)
|
80
|
+
end
|
81
|
+
alias_method :paddingBottom=, :padding_bottom=
|
82
|
+
|
83
|
+
def padding=(pad)
|
84
|
+
padding[:left] = padding[:top] = padding[:right] = padding[:bottom] = dp2px(pad)
|
85
|
+
end
|
86
|
+
|
87
|
+
def margin_left=(m_left)
|
88
|
+
margin[:left] = dp2px(m_left)
|
89
|
+
end
|
90
|
+
alias_method :marginLeft=, :margin_left=
|
91
|
+
|
92
|
+
def margin_top=(m_top)
|
93
|
+
margin[:top] = dp2px(m_top)
|
94
|
+
end
|
95
|
+
alias_method :marginTop=, :margin_top=
|
96
|
+
|
97
|
+
def margin_right=(m_right)
|
98
|
+
margin[:right] = dp2px(m_right)
|
99
|
+
end
|
100
|
+
alias_method :marginRight=, :margin_right=
|
101
|
+
|
102
|
+
def margin_bottom=(m_bottom)
|
103
|
+
margin[:bottom] = dp2px(m_bottom)
|
104
|
+
end
|
105
|
+
alias_method :marginBottom=, :margin_bottom=
|
106
|
+
|
107
|
+
def margin=(m)
|
108
|
+
margin[:left] = margin[:top] = margin[:right] = margin[:bottom] = dp2px(m)
|
109
|
+
end
|
110
|
+
|
111
|
+
# this can only be used on a widget that's within a LinearLayout
|
112
|
+
def layout_weight=(weight)
|
113
|
+
layout_params.weight = weight
|
114
|
+
end
|
115
|
+
|
116
|
+
def layout_gravity=(gravity)
|
117
|
+
layout_params.gravity = convert_gravity(gravity)
|
118
|
+
end
|
119
|
+
|
120
|
+
def corner_radius(corner_radius)
|
121
|
+
@corner_radius = dp2px(corner_radius)
|
122
|
+
end
|
123
|
+
|
124
|
+
# use this if you need to do something after all style methods have been called (e.g.
|
125
|
+
# applying layout params)
|
126
|
+
def finalize
|
127
|
+
create_rounded_bg if corner_radius
|
128
|
+
@view.setPadding(padding[:left], padding[:top], padding[:right], padding[:bottom])
|
129
|
+
layout_params.setMargins(margin[:left],
|
130
|
+
margin[:top],
|
131
|
+
margin[:right],
|
132
|
+
margin[:bottom]) if layout_params.respond_to?(:setMargins)
|
133
|
+
@view.setLayoutParams(layout_params)
|
134
|
+
end
|
135
|
+
|
136
|
+
def layout_params
|
137
|
+
@layout_params ||= @view.getLayoutParams()
|
138
|
+
end
|
139
|
+
|
140
|
+
def convert_color(color)
|
141
|
+
return ColorFactory.from_hex(color) if color.is_a?(String)
|
142
|
+
color
|
143
|
+
end
|
144
|
+
|
145
|
+
def convert_gravity(gravity)
|
146
|
+
case gravity
|
147
|
+
when :center then Android::View::Gravity::CENTER
|
148
|
+
when :left then Android::View::Gravity::LEFT
|
149
|
+
else
|
150
|
+
gravity
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def dp2px(dp_val)
|
155
|
+
(dp_val * density + 0.5).to_i
|
156
|
+
end
|
157
|
+
|
158
|
+
def density
|
159
|
+
@density ||= context.getResources.getDisplayMetrics.density
|
160
|
+
end
|
161
|
+
|
162
|
+
def create_drawable(corner_radius)
|
163
|
+
createDrawable(corner_radius)
|
164
|
+
end
|
165
|
+
|
166
|
+
private
|
167
|
+
|
168
|
+
def padding
|
169
|
+
@padding ||= { left: 0, top: 0, right: 0, bottom: 0 }
|
170
|
+
end
|
171
|
+
|
172
|
+
def margin
|
173
|
+
@margin ||= { left: 0, top: 0, right: 0, bottom: 0 }
|
174
|
+
end
|
175
|
+
|
176
|
+
def convert_dimension_value(value)
|
177
|
+
case value
|
178
|
+
when :match_parent, :full
|
179
|
+
Android::View::ViewGroup::LayoutParams::MATCH_PARENT
|
180
|
+
when :wrap_content
|
181
|
+
Android::View::ViewGroup::LayoutParams::WRAP_CONTENT
|
182
|
+
else
|
183
|
+
dp2px(value)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def create_rounded_bg
|
188
|
+
# creating this shape in Ruby raises an ART error, but it works in Java
|
189
|
+
#radii = [corner_radius, corner_radius, corner_radius, corner_radius,
|
190
|
+
# corner_radius, corner_radius, corner_radius, corner_radius]
|
191
|
+
#shape = Android::Graphics::Drawable::Shapes::RoundRectShape.new(radii, nil, nil)
|
192
|
+
|
193
|
+
# StyleHelper contains a Java extension
|
194
|
+
shape = StylerHelper.shared.createRoundRect(dp2px(corner_radius))
|
195
|
+
|
196
|
+
drawable = Android::Graphics::Drawable::ShapeDrawable.new(shape)
|
197
|
+
drawable.paint.color = bg_color
|
198
|
+
@view.setBackgroundDrawable(drawable)
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|