bluepotion 0.0.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 +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
|