Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. import kivy
  2. from kivy.app import App
  3. from kivy.lang import Builder
  4. from kivy.logger import Logger
  5. from kivy.properties import ObjectProperty
  6. from kivy.uix.anchorlayout import AnchorLayout
  7. from kivy.core.window import Window
  8.  
  9. if kivy.platform == 'android':
  10. from jnius import autoclass, PythonJavaClass, java_method
  11.  
  12. _PythonActivity = autoclass('org.kivy.android.PythonActivity')
  13.  
  14. class Runnable(PythonJavaClass):
  15. __javainterfaces__ = ['java/lang/Runnable']
  16. __runnables__ = []
  17.  
  18. def __init__(self, func):
  19. super(Runnable, self).__init__()
  20. self.func = func
  21.  
  22. def __call__(self, args, kwargs):
  23. self.args = args
  24. self.kwargs = kwargs
  25. Runnable.__runnables__.append(self)
  26. _PythonActivity.mActivity.runOnUiThread(self)
  27.  
  28. @java_method('()V')
  29. def run(self):
  30. try:
  31. self.func(*self.args, **self.kwargs)
  32. except:
  33. import traceback
  34. traceback.print_exc()
  35.  
  36. Runnable.__runnables__.remove(self)
  37.  
  38. def run_on_ui_thread(f):
  39. def f2(*args, **kwargs):
  40. Runnable(f)(args, kwargs)
  41. return f2
  42.  
  43. @run_on_ui_thread
  44. def go_fullscreen(inst=None, value=None, *args, **kwargs):
  45. '''Change to fullscreen if we are on a platform that supports it.
  46. '''
  47. if kivy.platform == 'android':
  48. Logger.debug("go_fullscreen: Attempting to enter immersive mode")
  49. activity = autoclass('org.kivy.android.PythonActivity').mActivity
  50. View = autoclass('android.view.View')
  51. decorView = activity.getWindow().getDecorView()
  52. flags = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY \
  53. | View.SYSTEM_UI_FLAG_FULLSCREEN \
  54. | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN \
  55. | View.SYSTEM_UI_FLAG_LAYOUT_STABLE \
  56. | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION \
  57. | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
  58. decorView.setSystemUiVisibility(flags)
  59.  
  60. def remove_loading_screen():
  61. '''Remove kivy splashscreen
  62. '''
  63. activity = autoclass('org.kivy.android.PythonActivity').mActivity
  64. activity.removeLoadingScreen()
  65. else: # not supported. stub out
  66. def go_fullscreen(inst=None, value=None, *args, **kwargs):
  67. pass
  68.  
  69. def remove_loading_screen():
  70. pass
  71.  
  72.  
  73. class ImmersiveBug(AnchorLayout):
  74. appinfo = ObjectProperty(None)
  75.  
  76. def do_fullscreen(self):
  77. go_fullscreen()
  78. self.canvas.ask_update()
  79.  
  80. def update_info(self, inst=None, val=None):
  81. '''Update debug label text'''
  82. app = App.get_running_app()
  83. app_info_d = {
  84. 'root.size': app.root.size,
  85. 'Window.size': Window.size,
  86. 'Window.gl_size': Window._win._get_gl_size(),
  87. 'Window.window_size': Window._win.window_size,
  88. 'Window.fullscreen': Window.fullscreen,
  89. 'Window.borderless': Window.borderless,
  90. }
  91. self.appinfo.text = '\n'.join(['{}={}'.format(k,v) for k,v in app_info_d.items()])
  92.  
  93. kv = Builder.load_string('''
  94. ImmersiveBug:
  95. canvas.before:
  96. Color:
  97. rgba: .8,.5,.5,.5
  98. Rectangle:
  99. pos: self.pos
  100. size: self.size
  101. appinfo: _appinfo
  102. padding: '50dp'
  103. BoxLayout:
  104. Label:
  105. id: _appinfo
  106. text: 'refresh to see window data'
  107. BoxLayout:
  108. orientation: 'vertical'
  109. Button:
  110. Button:
  111. text: 'refresh'
  112. on_release: root.update_info()
  113. Button:
  114. Button:
  115. Button:
  116. text: 'fullscreen'
  117. on_release: root.do_fullscreen()
  118. Button:
  119. Button:
  120. Button:
  121. text: 'Update Canvas'
  122. on_release: root.canvas.ask_update()
  123. Button:
  124.  
  125. <Widget>:
  126. canvas.after:
  127. Color:
  128. rgba: .5,.5,.5,.5
  129. Line:
  130. rectangle: self.x, self.y, self.width, self.height
  131. width: 2
  132. ''')
  133.  
  134. class ImmersiveBugApp(App):
  135.  
  136. def build(self):
  137. self.root = kv
  138. return self.root
  139.  
  140. if __name__ == '__main__':
  141. ImmersiveBugApp().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement