Module: PMScreenModule

Included in:
PMScreen
Defined in:
lib/project/pro_motion/pm_screen_module.rb

Overview

hipbyte.myjetbrains.com/youtrack/issue/RM-773 - can’t put this in a module yet :( module ProMotion

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



4
5
6
# File 'lib/project/pro_motion/pm_screen_module.rb', line 4

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#action_barObject



166
167
168
# File 'lib/project/pro_motion/pm_screen_module.rb', line 166

def action_bar
  activity.getActionBar()
end

#activityObject



162
163
164
# File 'lib/project/pro_motion/pm_screen_module.rb', line 162

def activity
  getActivity()
end

#add_action_bar_button(options = {}) ⇒ Object

Example: add_action_bar_button(title: “My text”, show: :if_room)



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/project/pro_motion/pm_screen_module.rb', line 175

def add_action_bar_button(options={})
  unless menu
    mp "#{self.inspect}#add_action_bar_button: No menu set up yet."
    return
  end

  options[:show] ||= :always

  # Should be something like Android::MenuItem::SHOW_AS_ACTION_IF_ROOM
  show_as_action = 0 if options[:show] == :never
  show_as_action = 1 if options[:show] == :if_room
  show_as_action = 2 if options[:show] == :always
  show_as_action = 4 if options[:show] == :with_text
  show_as_action = 8 if options[:show] == :collapse

  btn = self.activity.menu.add(options.fetch(:group, 0), options.fetch(:item_id, 0), options.fetch(:order, 0), options.fetch(:title, "Untitled"))
  btn.setShowAsAction(show_as_action) if show_as_action
  btn.setIcon(options[:icon]) if options[:icon]
  btn
end

#append(view_or_class, style = nil, opts = {}, dummy = nil) ⇒ Object



88
89
90
# File 'lib/project/pro_motion/pm_screen_module.rb', line 88

def append(view_or_class, style=nil, opts={}, dummy=nil)
  self.rmq.append(view_or_class, style, opts)
end

#append!(view_or_class, style = nil, opts = {}) ⇒ Object



92
93
94
# File 'lib/project/pro_motion/pm_screen_module.rb', line 92

def append!(view_or_class, style=nil, opts={})
  self.rmq.append(view_or_class, style, opts).get
end

#close(options = {}) ⇒ Object



137
138
139
# File 'lib/project/pro_motion/pm_screen_module.rb', line 137

def close(options={})
  self.activity.finish
end

#color(*params) ⇒ Object



76
77
78
# File 'lib/project/pro_motion/pm_screen_module.rb', line 76

def color(*params)
  RMQ.color(*params)
end

#fontObject



80
81
82
# File 'lib/project/pro_motion/pm_screen_module.rb', line 80

def font
  rmq.font
end

#hide_keyboardObject



156
157
158
159
# File 'lib/project/pro_motion/pm_screen_module.rb', line 156

def hide_keyboard
  input_manager = activity.getSystemService(Android::Content::Context::INPUT_METHOD_SERVICE)
  input_manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
end

#imageObject



84
85
86
# File 'lib/project/pro_motion/pm_screen_module.rb', line 84

def image
  rmq.image
end


170
171
172
# File 'lib/project/pro_motion/pm_screen_module.rb', line 170

def menu
  activity.menu
end

#on_loadObject



72
73
74
# File 'lib/project/pro_motion/pm_screen_module.rb', line 72

def on_load
  # abstract
end

#open(screen_class, options = {}) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/project/pro_motion/pm_screen_module.rb', line 109

def open(screen_class, options={})
  mp "ScreenModule open", debugging_only: true
  activity_class = options.delete(:activity) || PMSingleFragmentActivity

  # TODO: replace the fragment in the activity when possible
  # replace the fragment if we can; otherwise launch a new activity
  # we're taking a conservative approach for now - eventually we'll want to allow
  # replacing fragments for any kind of activity, but I'm not sure of the best way
  # to implement that yet
  intent = Android::Content::Intent.new(self.activity, activity_class)
  intent.putExtra PMSingleFragmentActivity::EXTRA_FRAGMENT_CLASS, screen_class.to_s

  if extras = options.delete(:extras)
    extras.keys.each do |key, value|
      # TODO, cahnge to bundle and do like below
      intent.putExtra key.to_s, value.toString
    end
  end

  unless options.blank?
    # The rest of the options are screen accessors, we use fragment arguments for this
    hash_bundle = PMHashBundle.from_hash(options)
    intent.putExtra PMSingleFragmentActivity::EXTRA_FRAGMENT_ARGUMENTS, hash_bundle.to_bundle
  end

  self.activity.startActivity intent
end

#r(resource_type, resource_name) ⇒ Object

temporary stand-in for Java’s R class



100
101
102
103
# File 'lib/project/pro_motion/pm_screen_module.rb', line 100

def r(resource_type, resource_name)
  resources.getIdentifier(resource_name.to_s, resource_type.to_s,
                          activity.getApplicationInfo.packageName)
end

#rmq(*working_selectors) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/project/pro_motion/pm_screen_module.rb', line 58

def rmq(*working_selectors)
  crmq = (rmq_data.cached_rmq ||= RMQ.create_with_selectors([], self))

  if working_selectors.length == 0
    crmq
  else
    RMQ.create_with_selectors(working_selectors, self, crmq)
  end
end

#rmq_dataObject



46
47
48
# File 'lib/project/pro_motion/pm_screen_module.rb', line 46

def rmq_data
  @_rmq_data ||= RMQScreenData.new
end

#root_viewObject



68
69
70
# File 'lib/project/pro_motion/pm_screen_module.rb', line 68

def root_view
  self.getView
end

#show_toast(message) ⇒ Object



105
106
107
# File 'lib/project/pro_motion/pm_screen_module.rb', line 105

def show_toast(message)
  Android::Widget::Toast.makeText(activity, message, Android::Widget::Toast::LENGTH_SHORT).show
end

#soft_input_mode(mode) ⇒ Object



147
148
149
150
151
152
153
154
# File 'lib/project/pro_motion/pm_screen_module.rb', line 147

def soft_input_mode(mode)
  mode_const =
    case mode
    when :adjust_resize
      Android::View::WindowManager::LayoutParams::SOFT_INPUT_ADJUST_RESIZE
    end
  activity.getWindow().setSoftInputMode(mode_const)
end

#start_activity(activity_class) ⇒ Object



141
142
143
144
145
# File 'lib/project/pro_motion/pm_screen_module.rb', line 141

def start_activity(activity_class)
  intent = Android::Content::Intent.new(self.activity, activity_class)
  #intent.putExtra("key", value); # Optional parameters
  self.activity.startActivity(intent)
end

#stylesheetObject



50
51
52
# File 'lib/project/pro_motion/pm_screen_module.rb', line 50

def stylesheet
  self.rmq.stylesheet
end

#stylesheet=(value) ⇒ Object



54
55
56
# File 'lib/project/pro_motion/pm_screen_module.rb', line 54

def stylesheet=(value)
  self.rmq.stylesheet = value
end