Class: AndroidQuery

Inherits:
Object
  • Object
show all
Defined in:
lib/android_query/android_query.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ AndroidQuery

Returns a new instance of AndroidQuery.



4
5
6
# File 'lib/android_query/android_query.rb', line 4

def initialize(source)
  self.activity = source
end

Instance Attribute Details

#activityObject

Returns the value of attribute activity.



2
3
4
# File 'lib/android_query/android_query.rb', line 2

def activity
  @activity
end

Instance Method Details

#button(layout, options = {}) ⇒ Object



34
35
36
37
# File 'lib/android_query/android_query.rb', line 34

def button(layout, options = {})
  btn = Android::Widget::Button.new(self.activity)
  create_view_layout_params(btn, layout, options)
end

#create_layout_with_params(layout, options) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/android_query/android_query.rb', line 110

def create_layout_with_params(layout, options)
  options = merge_options(options)
  width = get_width(options, layout)
  height = get_height(options, layout)
  orientation = get_orientation(options, layout)
  my_layout = layout[:layout_class].new(self.activity)
  layout_params = layout[:params_class].new(width, height)
  layout_params.weight = options[:weight] if layout[:layout_sym] == :linear
  my_layout.setLayoutParams(layout_params)
  my_layout.setOrientation(orientation) if layout[:layout_sym] == :linear
  my_layout.setWeightSum(options[:weight_sum]) if layout[:layout_sym] == :linear
  my_layout
end

#create_view_layout_params(view, layout, options) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/android_query/android_query.rb', line 124

def create_view_layout_params(view, layout, options)
  options = merge_options(options)
  width = get_width(options, layout)
  height = get_height(options, layout)
  layout_params = layout[:params_class].new(width, height)
  layout_params.weight = options[:weight]
  view.setText(options[:text]) unless options[:text].nil?
  view.setLayoutParams(layout_params)
  view.onClickListener = AQClickListener.new(self.activity, options) if options[:click]
  view.setId(options[:id]) if options[:id]
  layout[:layout].addView(view)
  view
end

#edit_text(layout, options = {}) ⇒ Object



29
30
31
32
# File 'lib/android_query/android_query.rb', line 29

def edit_text(layout, options = {})
  et = Android::Widget::EditText.new(self.activity) 
  create_view_layout_params(et, layout, options)
end

#find(view_id) ⇒ Object



138
139
140
# File 'lib/android_query/android_query.rb', line 138

def find(view_id)
  self.activity.findViewById(view_id)
end

#get_height(options, layout) ⇒ Object



88
89
90
91
92
93
94
95
96
97
# File 'lib/android_query/android_query.rb', line 88

def get_height(options, layout)
  case options[:h]
  when :mp, :match_parent
    layout[:params_class]::MATCH_PARENT
  when :wc, :wrap_content
    layout[:params_class]::WRAP_CONTENT
  else
    options[:h]
  end
end

#get_layout(layout, options) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/android_query/android_query.rb', line 43

def get_layout(layout, options)
  options = merge_options(options)
  layout_and_params = case layout
                      when :linear
                        [Android::Widget::LinearLayout, Android::Widget::LinearLayout::LayoutParams]
                      when :relative
                        [Android::Widget::RelativeLayout, Android::Widget::RelativeLayout::LayoutParams]
                      when :absolute
                        [Android::Widget::AbsoluteLayout, Android::Widget::AbsoluteLayout::LayoutParams]
                      else
                        layout
                      end
  {
    layout: nil,
    layout_class: layout_and_params[0],
    params_class: layout_and_params[1],
    layout_sym: layout,
    parent: options[:parent],
  }
end

#get_orientation(options, layout) ⇒ Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/android_query/android_query.rb', line 99

def get_orientation(options, layout)
  case options[:orientation]
  when :vertical, :v
    layout[:layout_class]::VERTICAL
  when :horizontal, :h
    layout[:layout_class]::HORIZONTAL
  else
    raise 'Please set either :horizontal or :vertical for the orientation'
  end
end

#get_width(options, layout) ⇒ Object



77
78
79
80
81
82
83
84
85
86
# File 'lib/android_query/android_query.rb', line 77

def get_width(options, layout)
  case options[:w]
  when :mp, :match_parent
    layout[:params_class]::MATCH_PARENT
  when :wc, :wrap_content
    layout[:params_class]::WRAP_CONTENT
  else
    options[:w]
  end
end

#layout(layout_sym, options = {}, &block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/android_query/android_query.rb', line 8

def layout(layout_sym, options = {}, &block)
  layout_info = get_layout(layout_sym, options)
  my_layout = create_layout_with_params(layout_info, options)
  block_layout = {
    layout: my_layout,
    layout_class: layout_info[:layout_class],
    params_class: layout_info[:params_class],
    layout_sym: layout_sym,
    parent: layout_info[:parent],
  }
  block.call(block_layout)
  block_layout[:parent][:layout].addView(my_layout) if block_layout[:parent]
  set_content(block_layout) if block_layout[:parent].nil?
  block_layout
end

#merge_options(options) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/android_query/android_query.rb', line 64

def merge_options(options)
  {
    w: :mp,
    h: :wc,
    orientation: :vertical,
    weight: 0,
    weight_sum: 0,
    parent: nil,
    click: nil,
    id: nil,
  }.merge(options)
end

#set_content(layout, params = {}) ⇒ Object



39
40
41
# File 'lib/android_query/android_query.rb', line 39

def set_content(layout, params = {})
  self.activity.setContentView(layout[:layout])
end

#text_view(layout, options = {}) ⇒ Object



24
25
26
27
# File 'lib/android_query/android_query.rb', line 24

def text_view(layout, options = {})
  tv = Android::Widget::TextView.new(self.activity)
  create_view_layout_params(tv, layout, options)
end

#toast(text, options = {}) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/android_query/android_query.rb', line 142

def toast(text, options = {})
  options = {
    gravity: :bottom,
    length: :short
  }.merge(options)
  
  gravity_options = {
    top: Android::View::Gravity::TOP,
    left: Android::View::Gravity::LEFT,
    right: Android::View::Gravity::RIGHT,
    bottom: Android::View::Gravity::BOTTOM,
    center: Android::View::Gravity::CENTER,
  }
  
  length_options = {
    short: Android::Widget::Toast::LENGTH_SHORT,
    long: Android::Widget::Toast::LENGTH_LONG,
  }
  
  the_toast = Android::Widget::Toast.makeText(self.activity, text, length_options[options[:length]])
  the_toast.setGravity(gravity_options[options[:gravity]], 0, 0)
  the_toast.show
end