bluepotion 0.1.2 → 0.1.3

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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/lib/project/blue_potion_net.rb +105 -0
  3. data/lib/project/ext/object.rb +2 -0
  4. data/lib/project/potion.rb +19 -3
  5. data/lib/project/potion_dialog/potion_dialog.rb +46 -0
  6. data/lib/project/pro_motion/{pm_activity.rb → activities/pm_activity.rb} +18 -0
  7. data/lib/project/pro_motion/activities/pm_home_activity.rb +14 -0
  8. data/lib/project/pro_motion/activities/pm_navigation_activity.rb +83 -0
  9. data/lib/project/pro_motion/{pm_single_fragment_activity.rb → activities/pm_single_fragment_activity.rb} +14 -3
  10. data/lib/project/pro_motion/adapters/pm_base_adapter.rb +75 -0
  11. data/lib/project/pro_motion/adapters/pm_cursor_adapter.rb +44 -0
  12. data/lib/project/pro_motion/fragments/pm_list_screen.rb +191 -0
  13. data/lib/project/pro_motion/{pm_screen.rb → fragments/pm_screen.rb} +31 -6
  14. data/lib/project/pro_motion/{pm_screen_module.rb → fragments/pm_screen_module.rb} +72 -20
  15. data/lib/project/pro_motion/pm_application.rb +15 -4
  16. data/lib/project/pro_motion/{pm_hash_bundle.rb → support/pm_hash_bundle.rb} +4 -0
  17. data/lib/project/ruby_motion_query/rmq/base.rb +1 -1
  18. data/lib/project/ruby_motion_query/rmq/data.rb +2 -36
  19. data/lib/project/ruby_motion_query/rmq/subviews.rb +30 -0
  20. data/lib/project/ruby_motion_query/rmq_color.rb +1 -1
  21. data/lib/project/ruby_motion_query/rmq_resource.rb +26 -0
  22. data/lib/project/version.rb +1 -1
  23. data/lib/project/volley_wrap/http_result.rb +98 -0
  24. data/lib/project/volley_wrap/request.rb +98 -0
  25. data/lib/project/volley_wrap/response_listener.rb +49 -0
  26. data/lib/project/volley_wrap/session_client.rb +72 -0
  27. metadata +19 -8
  28. data/lib/project/pro_motion/pm_home_activity.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6dd3f2d3afeb74ed27d0462acbc47b6a15690f45
4
- data.tar.gz: 8a045fc0e5135d3b915baf52e96b65cd1d617763
3
+ metadata.gz: ada06103d7e2b09d8f69878a072869d19f3c0188
4
+ data.tar.gz: 612d94fc6906fb6ad7d9a9d76376ff0f6203ab2f
5
5
  SHA512:
6
- metadata.gz: e51238c06e1b09622ff5f2d62c909f2ecc2bb3e9015fd8a600cbbbf655c1d47cde5f295dcdb233511b7c836f5d96da2e2b0eccce4a3184097cfacda19cbd90a6
7
- data.tar.gz: 4463dabf7934ab8ab4ec5051fbe121be0ee0f2020ca5fda508d31a2a2e96ff8115605ef109e471fadc72466b8b64f25b5ad39630436368567ea3a94849f52df7
6
+ metadata.gz: a4f9d90c3edea2e837635765b801a6d73c21b8e1ab0125c25ffe72bb8293373b8db84418de2603d88f5db341c19c8e12085e99072aa03ea0dc50a939f6d2e3d2
7
+ data.tar.gz: a54a04e03c0d3ef01b52abd99585246de71bc3b4715789e328a6c94037f770f37a290a62c1450b2eda8e3ec45fc97d756b890c02a412cac13b362d78c82ec3df
@@ -0,0 +1,105 @@
1
+ # Nice wrapper around VolleyWrapper, to use in BluePotion.
2
+ #
3
+ # result that is returned has these attributes:
4
+ # response
5
+ # object
6
+ # body
7
+ # status_code
8
+ # headers
9
+ # not_modified?
10
+ # success?
11
+ # failure?
12
+ #
13
+ # @example
14
+ # # Create a session and do a single HTML get. It's better
15
+ # # to use the shared session below.
16
+ # app.net.get("http://google.com")do |response|
17
+ # mp response.object # <- HTML
18
+ # end
19
+ #
20
+ # # To initialize the shared session, which is best to use
21
+ # # rather than the one-off above, do this. Once this
22
+ # # is done, all your gets, posts, puts, etc will use this
23
+ # # share session
24
+ # app.net.build_shared("http://baseurl.com") do |shared|
25
+ # # You can override the serializer per request
26
+ # # Leave blank for string
27
+ # shared.serializer = :json
28
+ # end
29
+ #
30
+ # # For shared, use relative paths
31
+ # app.net.get("foo.html") do |response|
32
+ # mp response.object # <- returns type you set in shared.serializer
33
+ # end
34
+ #
35
+ # # Post
36
+ # app.net.post("foo/bar", your_params_hash) do |response|
37
+ # mp response.object # <- returns type you set in shared.serializer
38
+ # end
39
+ #
40
+ # # If you have built a shared session, but want to use another
41
+ # # session, do this:
42
+ # app.net.get("foo.html", session: app.net.single_use_session) do |response|
43
+ # mp response.object # <- returns type you set in shared.serializer
44
+ # end
45
+ #
46
+ # # Get json:
47
+ # url = "http://openweathermap.org/data/2.1/find/name?q=san%20francisco"
48
+ # app.net.get_json(url) do |request|
49
+ # # request.object is a hash, parsed from the json
50
+ # temp_kelvin = request.object["list"].first["main"]["temp"]
51
+ # end
52
+ class BluePotionNet
53
+ class << self
54
+ def session_client
55
+ @_session_client ||= VW::SessionClient
56
+ end
57
+
58
+ def session
59
+ session_client.shared ? session_client.shared : single_use_session
60
+ end
61
+
62
+ def is_shared?
63
+ !session_client.shared.is_nil?
64
+ end
65
+
66
+ def single_use_session
67
+ session_client.new(PMApplication.current_application.context, "")
68
+ end
69
+
70
+ def build_shared(url, &block)
71
+ session_client.build_shared(PMApplication.current_application.context, url, &block)
72
+ end
73
+
74
+ def get(url, opts={}, &block)
75
+ raise "[BluePotion error] You must provide a block when using app.net.get" unless block
76
+ ses = opts.delete(:session) || self.session
77
+ opts[:serializer] = :string unless opts[:serializer]
78
+ ses.get(url, opts, &block)
79
+ end
80
+
81
+ def get_json(url, opts={}, &block)
82
+ raise "[BluePotion error] You must provide a block when using app.net.get_json" unless block
83
+ opts[:serializer] = :json
84
+ get(url, opts, &block)
85
+ end
86
+
87
+ def post(url, params, opts={}, &block)
88
+ raise "[BluePotion error] You must provide a block when using app.net.post" unless block
89
+ ses = opts.delete(:session) || self.session
90
+ ses.post(url, params, opts, &block)
91
+ end
92
+
93
+ def put(url, params, opts={}, &block)
94
+ raise "[BluePotion error] You must provide a block when using app.net.put" unless block
95
+ ses = opts.delete(:session) || self.session
96
+ ses.put(url, params, opts, &block)
97
+ end
98
+
99
+ def delete(url, params, opts={}, &block)
100
+ raise "[BluePotion error] You must provide a block when using app.net.delete" unless block
101
+ ses = opts.delete(:session) || self.session
102
+ ses.delete(url, params, opts, &block)
103
+ end
104
+ end
105
+ end
@@ -79,6 +79,8 @@ class Object
79
79
 
80
80
  if s.nil?
81
81
  s = "<nil>"
82
+ elsif s.is_a?(Array)
83
+ s = s.map{|e| e.inspect }.join("\n")
82
84
  else
83
85
  s = s.to_s
84
86
  end
@@ -1,28 +1,44 @@
1
1
  module Potion
2
2
  Activity = Android::App::Activity
3
+ Intent = Android::Content::Intent
3
4
  View = Android::View::View
5
+ Window = Android::View::Window
4
6
  ViewGroup = Android::View::ViewGroup
5
7
  Integer = Java::Lang::Integer
6
8
  ArrayList = Java::Util::ArrayList
7
9
  Bundle = Android::Os::Bundle
10
+ Environment = Android::Os::Environment
11
+ Uri = Android::Net::Uri
12
+ ArrayAdapter = Android::Widget::ArrayAdapter
13
+ BaseAdapter = Android::Widget::BaseAdapter
14
+ Dialog = Android::App::Dialog
15
+ EditorInfo = Android::View::Inputmethod::EditorInfo
8
16
 
9
- # layouts
17
+ # Layouts
18
+ LayoutInflater = Android::View::LayoutInflater
10
19
  LinearLayout = Android::Widget::LinearLayout
11
20
  FrameLayout = Android::Widget::FrameLayout
12
21
  RelativeLayout = Android::Widget::RelativeLayout
13
22
  AbsoluteLayout = Android::Widget::AbsoluteLayout
14
23
 
15
- # widgets
24
+ # Widgets
16
25
  Label = Android::Widget::TextView
17
26
  TextView = Android::Widget::TextView
27
+ EditText = Android::Widget::EditText
18
28
  ImageView = Android::Widget::ImageView
19
29
  Button = Android::Widget::Button
20
30
  CalendarView = Android::Widget::CalendarView
21
31
  Toast = Android::Widget::Toast
32
+ ListView = Android::Widget::ListView
22
33
 
23
- # graphics
34
+ # Graphics
24
35
  Color = Android::Graphics::Color
25
36
  Typeface = Android::Graphics::Typeface
37
+
38
+ # Media
39
+ File = Java::Io::File
40
+ MediaStore = Android::Provider::MediaStore
41
+ Contacts = Android::Provider::ContactsContract::Contacts
26
42
  end
27
43
 
28
44
  #
@@ -0,0 +1,46 @@
1
+ class PotionDialog
2
+
3
+ def initialize(options)
4
+
5
+ @width = options[:width] || options[:w]
6
+ @height = options[:height] || options[:h]
7
+
8
+ # err if missing required options
9
+ raise "[BluePotion ERROR] PotionDialog#initialize Requires an xml_layout" unless options[:xml_layout]
10
+ raise "[BluePotion ERROR] PotionDialog#initialize Cannot have width without height" if @width && !@height
11
+ raise "[BluePotion ERROR] PotionDialog#initialize Cannot have height without width" if @height && !@width
12
+
13
+ # Merging defaults
14
+ opts = {
15
+ title: false,
16
+ show: true
17
+ }.merge(options)
18
+
19
+ built_dialog = build_dialog(opts)
20
+
21
+ built_dialog.show if opts[:show]
22
+
23
+ built_dialog
24
+ end
25
+
26
+ def build_dialog(options)
27
+ # create dialog
28
+ dialog = Potion::Dialog.new(find.activity)
29
+
30
+ # manage title
31
+ if options[:title]
32
+ dialog.title = options[:title]
33
+ else
34
+ dialog.requestWindowFeature(Potion::Window::FEATURE_NO_TITLE)
35
+ end
36
+
37
+ # set alert content
38
+ dialog.setContentView(options[:xml_layout])
39
+
40
+ # set width and height of Dialog Window
41
+ if @width && @height
42
+ dialog.window.setLayout(@width, @height)
43
+ end
44
+ dialog
45
+ end
46
+ end
@@ -2,6 +2,9 @@
2
2
 
3
3
  class PMActivity < Android::App::Activity
4
4
 
5
+ EXTRA_FRAGMENT_CLASS = "fragment_class"
6
+ EXTRA_FRAGMENT_ARGUMENTS = "fragment_arguments"
7
+
5
8
  def onCreate(saved_instance_state)
6
9
  super
7
10
 
@@ -17,8 +20,10 @@
17
20
 
18
21
  def onResume
19
22
  super
23
+ on_resume
20
24
  PMApplication.current_application.current_activity = self
21
25
  end
26
+ def on_resume; end
22
27
 
23
28
  def onPause
24
29
  clear_references
@@ -38,6 +43,19 @@
38
43
  end
39
44
  def on_create_menu(_); end
40
45
 
46
+ def onOptionsItemSelected(item)
47
+ # Don't call super if method returns false
48
+ super unless on_options_item_selected(item) == false
49
+ end
50
+
51
+ def open(screen, options={})
52
+ find.screen.open screen, options
53
+ end
54
+
55
+ def close(options={})
56
+ find.screen.close options
57
+ end
58
+
41
59
  end
42
60
 
43
61
  #end
@@ -0,0 +1,14 @@
1
+ # RM-733
2
+ #module ProMotion
3
+ class PMHomeActivity < PMNavigationActivity
4
+ def on_create(saved_instance_state)
5
+ mp "PMHomeActivity on_create", debugging_only: true
6
+ @root_fragment ||= home_screen_class.new if home_screen_class
7
+ super # Opens @root_fragment
8
+ end
9
+
10
+ def home_screen_class
11
+ PMApplication.current_application.home_screen_class
12
+ end
13
+ end
14
+ #end
@@ -0,0 +1,83 @@
1
+ # An Activity designed to host a stack of fragments/screens.
2
+ # RM-733
3
+ #module ProMotion
4
+ class PMNavigationActivity < PMActivity
5
+ attr_accessor :fragment_container, :root_fragment, :menu
6
+
7
+ def on_create(saved_instance_state)
8
+ super
9
+ # mp "PMNavigationActivity on_create", debugging_only: true
10
+ activity_init
11
+ end
12
+
13
+ def on_create_menu(menu)
14
+ @menu = menu
15
+ self.fragment.on_create_menu(menu) if self.fragment
16
+ end
17
+
18
+ def on_options_item_selected(item)
19
+ self.fragment.on_options_item_selected(item) if self.fragment
20
+ end
21
+
22
+ def open_fragment(frag, options={})
23
+ mp frag
24
+ mgr = fragmentManager.beginTransaction
25
+ mgr.add(@fragment_container.getId, frag, "screen-#{fragmentManager.getBackStackEntryCount + 1}")
26
+ mgr.addToBackStack(nil)
27
+ mgr.commit
28
+ frag
29
+ end
30
+
31
+ def close_fragment
32
+ getFragmentManager.popBackStackImmediate
33
+ end
34
+
35
+ def fragment
36
+ # self.fragments.last
37
+ getFragmentManager.findFragmentByTag("screen-#{fragmentManager.getBackStackEntryCount}")
38
+ end
39
+
40
+ def on_fragment_attached(frag)
41
+ # No-op for now.
42
+ end
43
+
44
+ def on_fragment_detached(frag)
45
+ if new_frag = self.fragment
46
+ new_frag.set_title if new_frag.respond_to?(:set_title)
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def activity_init
53
+ setup_root_fragment_container
54
+ @root_fragment ||= intent_fragment_class && Kernel.const_get(intent_fragment_class.to_s).new
55
+ return unless @root_fragment
56
+ setup_root_fragment @root_fragment
57
+ open_fragment @root_fragment
58
+ @root_fragment = nil # Don't hang onto this reference.
59
+ end
60
+
61
+ def setup_root_fragment(frag)
62
+ return unless intent_fragment_arguments
63
+ PMHashBundle.from_bundle(intent_fragment_arguments).to_h.each do |key, value|
64
+ frag.send "#{key}=", value
65
+ end
66
+ end
67
+
68
+ def intent_fragment_arguments
69
+ intent.getBundleExtra(EXTRA_FRAGMENT_ARGUMENTS)
70
+ end
71
+
72
+ def intent_fragment_class
73
+ intent.getStringExtra(EXTRA_FRAGMENT_CLASS)
74
+ end
75
+
76
+ def setup_root_fragment_container
77
+ @fragment_container = Potion::FrameLayout.new(self)
78
+ @fragment_container.setId Potion::ViewIdGenerator.generate
79
+ self.contentView = @fragment_container
80
+ end
81
+
82
+ end
83
+ #end
@@ -4,14 +4,21 @@
4
4
  class PMSingleFragmentActivity < PMActivity
5
5
  attr_accessor :fragment_container, :fragment, :menu
6
6
 
7
- EXTRA_FRAGMENT_CLASS = "fragment_class"
8
- EXTRA_FRAGMENT_ARGUMENTS = "fragment_arguments"
9
-
10
7
  def on_create(saved_instance_state)
11
8
  super
12
9
 
13
10
  mp "PMSingleFragmentActivity on_create", debugging_only: true
14
11
 
12
+ setup_fragment
13
+ end
14
+
15
+ def on_resume
16
+ mp "PMSingleFragmentActivity on_resume", debugging_only: true
17
+
18
+ setup_fragment unless @fragment_container
19
+ end
20
+
21
+ def setup_fragment
15
22
  @fragment_container = Potion::FrameLayout.new(self)
16
23
  @fragment_container.setId Potion::ViewIdGenerator.generate
17
24
  self.contentView = @fragment_container
@@ -43,5 +50,9 @@
43
50
  self.fragment.on_create_menu(menu) if self.fragment
44
51
  end
45
52
 
53
+ def on_options_item_selected(item)
54
+ self.fragment.on_options_item_selected(item) if self.fragment
55
+ end
56
+
46
57
  end
47
58
  #end
@@ -0,0 +1,75 @@
1
+ class PMBaseAdapter < Android::Widget::BaseAdapter
2
+ attr_accessor :data
3
+
4
+ def initialize(opts={})
5
+ super()
6
+ @data = opts.fetch(:data, [])
7
+ end
8
+
9
+ def screen
10
+ @screen ||= rmq.screen
11
+ end
12
+ def screen=(value)
13
+ @screen
14
+ end
15
+
16
+ def areAllItemsEnabled(); are_all_items_enabled?; end
17
+ def are_all_items_enabled?
18
+ true
19
+ end
20
+
21
+ def isEnabled(position); is_enabled?(position); end
22
+ def is_enabled?(position)
23
+ true
24
+ end
25
+
26
+ def isEmpty(); is_empty?; end
27
+ def is_empty?
28
+ data.blank?
29
+ end
30
+
31
+ def hasStableIds(); has_stable_ids?; end
32
+ def has_stable_ids?
33
+ true
34
+ end
35
+
36
+ def getViewTypeCount(); view_type_count; end
37
+ def view_type_count()
38
+ 1
39
+ end
40
+
41
+ def getItemViewType(position); item_view_type_id(position); end
42
+ def item_view_type_id(position)
43
+ 0
44
+ end
45
+
46
+ def getCount(); count(); end
47
+ def count()
48
+ data.length
49
+ end
50
+
51
+ def getItem(position); item(position); end
52
+ def item(position)
53
+ data[position]
54
+ end
55
+
56
+ def getItemId(position); item_id(position); end
57
+ def item_id(position)
58
+ position
59
+ end
60
+
61
+ def getView(position, convert_view, parent); view(position, convert_view, parent); end
62
+ def view(position, convert_view, parent)
63
+ data = item(position)
64
+ out = convert_view || rmq.create!(data[:cell_class] || Potion::TextView)
65
+ update_view(out, data[:title])
66
+ if data[:action]
67
+ find(out).on(:tap) { find.screen.send(data[:action], data[:arguments], position) }
68
+ end
69
+ out
70
+ end
71
+
72
+ def update_view(view, data)
73
+ out.text = data
74
+ end
75
+ end
@@ -0,0 +1,44 @@
1
+ class PMCursorAdapter < PMBaseAdapter
2
+ attr_accessor :cursor
3
+ attr_accessor :cell_options
4
+
5
+ def initialize(opts={})
6
+ super()
7
+ @cursor = opts.fetch(:cursor)
8
+ @cell_options = opts.fetch(:cell, 1)
9
+ end
10
+
11
+ def count
12
+ cursor.count
13
+ end
14
+
15
+ def item(position)
16
+ cursor.moveToPosition(position)
17
+ cursor
18
+ end
19
+
20
+ def view(position, convert_view, parent)
21
+ data = item(position)
22
+ out = convert_view || rmq.create!(cell_options[:cell_class] || Potion::TextView)
23
+ update_view(out, data)
24
+ if cell_options[:action]
25
+ find(out).on(:tap) { find.screen.send(cell_options[:action], data, position) }
26
+ end
27
+ out
28
+ end
29
+
30
+ def update_view(out, data)
31
+ out.text = data.getString(cell_options[:title_column])
32
+ end
33
+
34
+ end
35
+
36
+ __END__
37
+
38
+ def table_data
39
+ {
40
+ cursor: my_cursor,
41
+ title_column: 0,
42
+ }
43
+ end
44
+
@@ -0,0 +1,191 @@
1
+ # http://hipbyte.myjetbrains.com/youtrack/issue/RM-773 - can't put this in a module yet :(
2
+ #module ProMotion
3
+
4
+ class PMListScreen < Android::App::ListFragment
5
+ include PMScreenModule
6
+
7
+ attr_accessor :view
8
+
9
+ def table_data
10
+ mp "Implement a table_data method in #{self.inspect}."
11
+ []
12
+ end
13
+
14
+ def load_view
15
+ # Potion::LinearLayout.new(self.activity)
16
+ self.view = create!(Potion::ListView, :list)
17
+ # find(self.view).style do |st|
18
+ # st.layout_width = :match_parent
19
+ # st.layout_height = :match_parent
20
+ # st.layout_weight = 1
21
+ # st.view.drawSelectorOnTop = false
22
+ # end
23
+ # self.view
24
+ end
25
+
26
+ def screen_setup
27
+ add_table_view
28
+ add_empty_view
29
+ add_adapter
30
+ end
31
+
32
+ def add_table_view
33
+ # create(Potion::ListView, :list).style do |st|
34
+ # st.layout_width = :match_parent
35
+ # st.layout_height = :match_parent
36
+ # st.layout_weight = 1
37
+ # st.view.drawSelectorOnTop = false
38
+ # end
39
+ end
40
+
41
+ def add_empty_view
42
+ # append(Potion::TextView, :empty).style do |st|
43
+ # st.layout_width = :match_parent
44
+ # st.layout_height = :match_parent
45
+ # st.background = "#FFFFFF"
46
+ # st.text = "No data"
47
+ # end
48
+ end
49
+
50
+ def add_adapter
51
+ self.view.setAdapter(adapter)
52
+ end
53
+
54
+ def adapter
55
+ @adapter ||= begin
56
+ td = table_data
57
+ if td.is_a?(Array)
58
+ PMBaseAdapter.new(data: td)
59
+ elsif td.is_a?(Hash)
60
+ mp "Please supply a cursor in #{self.inspect}#table_data." unless td[:cursor]
61
+ PMCursorAdapter.new(td)
62
+ end
63
+ end
64
+ end
65
+
66
+ ### Boilerplate from PMScreen ###
67
+
68
+ def onAttach(activity)
69
+ super
70
+ activity.on_fragment_attached(self) if activity.respond_to?(:on_fragment_attached)
71
+ on_attach(activity)
72
+ end
73
+ def on_attach(activity); end
74
+
75
+ def onCreate(bundle); super; on_create(bundle); end
76
+ def on_create(bundle); end
77
+
78
+ def onCreateView(inflater, parent, saved_instance_state)
79
+ super
80
+
81
+ if @xml_resource = self.class.xml_resource
82
+ @view = inflater.inflate(r(:layout, @xml_resource), parent, false)
83
+ else
84
+ v = load_view
85
+ @view ||= v
86
+ @view.setId Potion::ViewIdGenerator.generate
87
+ end
88
+
89
+ action_bar.hide if hide_action_bar?
90
+
91
+ on_create_view(inflater, parent, saved_instance_state)
92
+
93
+ @view
94
+ end
95
+ def on_create_view(inflater, parent, saved_instance_state); end
96
+
97
+ # def load_view
98
+ # Potion::FrameLayout.new(self.activity)
99
+ # end
100
+
101
+ def onActivityCreated(saved_instance_state)
102
+ mp "PMScreen onActivityCreated" if RMQ.debugging?
103
+
104
+ super
105
+
106
+ @view.rmq_data.is_screen_root_view = true
107
+
108
+ self.rmq.build(@view)
109
+
110
+ screen_setup
111
+
112
+ if self.class.rmq_style_sheet_class
113
+ self.rmq.stylesheet = self.class.rmq_style_sheet_class
114
+ @view.rmq.apply_style(:root_view) #if @view.rmq.stylesheet.respond_to?(:root_view)
115
+ end
116
+
117
+ build_and_tag_xml_views
118
+
119
+ set_title
120
+ on_load
121
+ on_activity_created
122
+ end
123
+ def on_load; end
124
+ def on_activity_created; end
125
+
126
+ def onStart; super; on_start; end
127
+ def on_start; end
128
+ alias :on_appear :on_start
129
+
130
+ def onResume; super; on_resume; end
131
+ def on_resume; end
132
+
133
+ def on_create_menu(menu); end
134
+
135
+ def onPause; super; on_pause; end
136
+ def on_pause; end
137
+
138
+ def onStop; super; on_stop; end
139
+ def on_stop; end
140
+
141
+ def onDestroyView; super; on_destroy_view; end
142
+ def on_destroy_view; end
143
+
144
+ def onDestroy; super; on_destroy; end
145
+ def on_destroy; end
146
+
147
+ def onDetach
148
+ super
149
+ on_detach
150
+ self.activity.on_fragment_detached(self) if self.activity.respond_to?(:on_fragment_detached)
151
+ end
152
+ def on_detach; end
153
+
154
+ def set_title
155
+ self.title = self.class.bars_title
156
+ end
157
+
158
+ def title
159
+ @title
160
+ end
161
+ def title=(value)
162
+ @title = value
163
+
164
+ if a = self.activity
165
+ if a_bar = self.action_bar
166
+ a_bar.title = value
167
+ end
168
+ a.title = value
169
+ end
170
+ end
171
+
172
+ private
173
+
174
+ def build_and_tag_xml_views
175
+ return unless @xml_resource
176
+
177
+ self.rmq.all.each do |view|
178
+ if ren = view.resource_entry_name
179
+ self.rmq.build(view).tag(ren.to_sym)
180
+ end
181
+ end
182
+ end
183
+
184
+ def hide_action_bar?
185
+ # RM-???: comparing nil to false causes ART crash
186
+ !self.class.show_action_bar.nil? && self.class.show_action_bar == false
187
+ end
188
+
189
+ end
190
+
191
+ #end