module PMScreenModule

Public Class Methods

included(base) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 4
def self.included(base)
  base.extend(ClassMethods)
end

Public Instance Methods

action_bar() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 255
def action_bar
  activity && activity.getActionBar
end
add_action_bar_button(options={}) click to toggle source

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

# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 276
def add_action_bar_button(options={})
  @action_bar ||= { button_actions: {} }
  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, @action_bar[:current_id] || 0), options.fetch(:order, 0), options.fetch(:title, ""))
  btn.setShowAsAction(show_as_action) if show_as_action
  btn.setIcon(image.resource(options[:icon].to_s)) if options[:icon]
  @action_bar[:button_actions][btn.getItemId] = options[:action] if options[:action]
  @action_bar[:current_id] = btn.getItemId + 1
  btn
end
append(view_or_class, style=nil, opts={}, dummy=nil) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 125
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={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 129
def append!(view_or_class, style=nil, opts={})
  self.rmq.append(view_or_class, style, opts).get
end
build(view_or_class, style=nil, opts={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 141
def build(view_or_class, style=nil, opts={})
  self.rmq.build(view_or_class, style, opts)
end
build!(view_or_class, style=nil, opts={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 145
def build!(view_or_class, style=nil, opts={})
  self.rmq.build(view_or_class, style, opts).get
end
build_and_tag_xml_views() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 311
def build_and_tag_xml_views
  return unless @xml_resource

  self.rmq.all.each do |view|
    if ren = view.resource_entry_name
      self.rmq.build(view).tag(ren.to_sym)
    end
  end
end
cleanup() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 68
def cleanup
  find.all.cleanup
  find.children.remove
  if @_rmq_data
    @_rmq_data.cleanup
    @_rmq_data = nil
  end
end
close(options={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 203
def close(options={})
  # Hang onto an activity reference, since we lose the activity
  act = self.activity

  if options[:activity] && options[:to_screen]
    # Closing to particular activity
    open options[:to_screen], activity: options[:activity], close: true
  elsif options[:to_screen]
    # Closing to particular fragment
    while act.fragment && !act.fragment.is_a?(options[:to_screen])
      act.close_fragment
      act.finish unless act.fragment
    end
  else
    # Closing current screen or activity if no screens left
    act.close_fragment if act.fragment
  end

  if act.fragment
    act.fragment.set_up_action_bar
    act.fragment.on_return(options)
  else
    act.finish unless act.fragment
  end
end
color(*params) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 113
def color(*params)
  RMQ.color(*params)
end
create(view_or_class, style=nil, opts={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 133
def create(view_or_class, style=nil, opts={})
  self.rmq.create(view_or_class, style, opts)
end
create!(view_or_class, style=nil, opts={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 137
def create!(view_or_class, style=nil, opts={})
  self.rmq.create(view_or_class, style, opts).get
end
dummy_workaround_for_kind_of() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 58
def dummy_workaround_for_kind_of
end
find(*working_selectors) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 85
def find(*working_selectors) # I do not call rmq below for performance reasons
  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
font() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 117
def font
  rmq.font
end
hide_keyboard() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 244
def hide_keyboard
  input_manager = activity.getSystemService(Android::Content::Context::INPUT_METHOD_SERVICE)
  input_manager.hideSoftInputFromWindow(view.getWindowToken(), 0)
end
image() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 121
def image
  rmq.image
end
log_tree() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 149
def log_tree
  rmq.log_tree
end
menu() click to toggle source
onDestroy() click to toggle source
Calls superclass method
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 61
def onDestroy
  #return super # disable rmq cleaning while debugging, but still super
  mp "onDestroy screen: #{self.class}", debugging_only: true
  self.cleanup
  super
end
on_load() click to toggle source

abstract methods

# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 110
def on_load; end
on_options_item_selected(item) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 300
def on_options_item_selected(item)
  return unless @action_bar
  return unless method_name = @action_bar[:button_actions][item.getItemId]
  if respond_to?(method_name)
    send(method_name)
  else
    mp "#{self.inspect} No method #{method_name.inspect} implemented for this screen."
    true
  end
end
on_return(opts={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 111
def on_return(opts={}); end
open(screen_class, options={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 163
def open(screen_class, options={})
  mp "ScreenModule open", debugging_only: true

  if !options[:activity] && self.activity.respond_to?(:open_fragment)
    if screen_class.respond_to?(:new)
      screen = screen_class.new
    else
      screen = screen_class
    end
    self.activity.open_fragment screen, options
  else
    open_modal(screen_class, options)
  end
end
open_modal(screen_class, options) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 178
def open_modal(screen_class, options)
  activity_class = options.delete(:activity) || PMNavigationActivity
  activity_class = PMNavigationActivity if activity_class == :nav
  activity_class = PMSingleFragmentActivity if activity_class == :single

  intent = Potion::Intent.new(self.activity, activity_class)
  intent.putExtra PMActivity::EXTRA_FRAGMENT_CLASS, screen_class.to_s
  intent.setFlags(Potion::Intent::FLAG_ACTIVITY_CLEAR_TOP) if options.delete(:close)

  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 PMActivity::EXTRA_FRAGMENT_ARGUMENTS, hash_bundle.to_bundle
  end

  self.activity.startActivity intent
end
r(resource_type, resource_name) click to toggle source

temporary stand-in for Java’s R class, TODO remove this

# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 154
def r(resource_type, resource_name)
  resources.getIdentifier(resource_name.to_s, resource_type.to_s,
                          activity.getApplicationInfo.packageName)
end
rmq(*working_selectors) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 95
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_data() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 54
def rmq_data
  @_rmq_data ||= RMQScreenData.new
end
root_view() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 105
def root_view
  self.getView
end
set_title() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 321
def set_title
  self.title = self.class.bars_title
end
set_up_action_bar(options={}) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 263
def set_up_action_bar(options={})
  if options[:show]
    action_bar.show
    action_bar.setDisplayHomeAsUpEnabled(!!options[:back])
    action_bar.setDisplayShowHomeEnabled(!!options[:icon])
    action_bar.setIcon(image.resource(options[:custom_icon].to_s)) if options[:custom_icon]
    action_bar.setHomeAsUpIndicator(image.resource(options[:custom_back].to_s)) if options[:custom_back]
  else
    action_bar.hide
  end
end
show_keyboard() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 249
def show_keyboard
  field = activity.getCurrentFocus()
  input_manager = activity.getSystemService(Android::Content::Context::INPUT_METHOD_SERVICE)
  input_manager.showSoftInput(field, Android::View::InputMethod::InputMethodManager::SHOW_FORCED)
end
show_toast(message) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 159
def show_toast(message) # TODO, remove this, use app.toast
  Android::Widget::Toast.makeText(activity, message, Android::Widget::Toast::LENGTH_SHORT).show
end
soft_input_mode(mode) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 235
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) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 229
def start_activity(activity_class)
  intent = Potion::Intent.new(self.activity, activity_class)
  #intent.putExtra("key", value); # Optional parameters
  self.activity.startActivity(intent)
end
stylesheet() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 77
def stylesheet
  self.rmq.stylesheet
end
stylesheet=(value) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 81
def stylesheet=(value)
  self.rmq.stylesheet = value
end
title() click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 325
def title
  @title
end
title=(value) click to toggle source
# File lib/project/pro_motion/fragments/pm_screen_module.rb, line 328
def title=(value)
  @title = value

  if a = self.activity
    if a_bar = self.action_bar
      a_bar.title = value
    end
    a.title = value
  end
end