class Android::Manifest::Component

<activity>, <service>, <receiver> or <provider> element in <application> element of the manifest file.

Constants

TYPES

component types

Attributes

elem[R]

@return [REXML::Element]

icon_id[R]

@return [String] icon id - use apk.icon_by_id(icon_id) to retrieve it’s corresponding data.

intent_filters[R]

@return [Array<Manifest::IntentFilters<Manifest::IntentFilter>>]

metas[R]

@return [Array<Manifest::Meta>]

name[R]

@return [String] component name

type[R]

@return [String] type string in TYPES

Public Class Methods

new(elem) click to toggle source

@param [REXML::Element] elem target element @raise [ArgumentError] when elem is invalid.

# File lib/android/manifest.rb, line 39
def initialize(elem)
  raise ArgumentError unless Component.valid?(elem)

  @elem = elem
  @type = elem.name
  @name = elem.attributes['name']
  @icon_id = elem.attributes['icon']

  @intent_filters = parse_intent_filters
  @metas = parse_metas
end
valid?(elem) click to toggle source

the element is valid Component element or not @param [REXML::Element] elem xml element @return [Boolean]

# File lib/android/manifest.rb, line 18
def self.valid?(elem)
  TYPES.include?(elem.name.downcase)
rescue => e
  false
end

Private Instance Methods

parse_intent_filters() click to toggle source
# File lib/android/manifest.rb, line 53
def parse_intent_filters
  intent_filters = []
  return intent_filters if @elem.elements['intent-filter'].nil?

  @elem.each_element('intent-filter') do |filter|
    next if filter&.elements&.empty?
    next unless IntentFilter.valid?(filter)

    intent_filter = IntentFilter.new(filter)
    intent_filters << intent_filter unless intent_filter.empty?
  end

  intent_filters
end
parse_metas() click to toggle source
# File lib/android/manifest.rb, line 68
def parse_metas
  metas = []
  return metas if @elem.elements['meta-data'].nil?

  @elem.each_element('meta-data') do |e|
    metas << Meta.new(e)
  end

  metas
end