diff --git a/kivy/app.py b/kivy/app.py index 9117b4df0..60168fc19 100644 --- a/kivy/app.py +++ b/kivy/app.py @@ -326,6 +326,7 @@ from kivy.resources import resource_find from kivy.utils import platform as core_platform from kivy.uix.widget import Widget from kivy.properties import ObjectProperty, StringProperty +from kivy.setupconfig import USE_SDL2 platform = core_platform @@ -1023,7 +1024,7 @@ class App(EventDispatcher): setting_key = 282 # F1 # android hack, if settings key is pygame K_MENU - if platform == 'android': + if platform == 'android' and not USE_SDL2: import pygame setting_key = pygame.K_MENU diff --git a/kivy/core/window/__init__.py b/kivy/core/window/__init__.py index a8ebe6970..99a8f073a 100755 --- a/kivy/core/window/__init__.py +++ b/kivy/core/window/__init__.py @@ -497,6 +497,8 @@ class WindowBase(EventDispatcher): return 0 def _get_android_kheight(self): + if USE_SDL2: # Placeholder until the SDL2 bootstrap supports this + return 0 global android if not android: import android diff --git a/kivy/core/window/window_sdl2.py b/kivy/core/window/window_sdl2.py index d5f9876fe..674649e8e 100644 --- a/kivy/core/window/window_sdl2.py +++ b/kivy/core/window/window_sdl2.py @@ -393,7 +393,7 @@ class WindowSDL(WindowBase): # We have a conflict of using either the mouse or the finger. # Right now, we have no mechanism that we could use to know # which is the preferred one for the application. - if platform == "ios": + if platform in ('ios', 'android'): SDL2MotionEventProvider.q.appendleft(event) pass diff --git a/kivy/metrics.py b/kivy/metrics.py index 71a700394..a47246728 100644 --- a/kivy/metrics.py +++ b/kivy/metrics.py @@ -104,6 +104,7 @@ __all__ = ('Metrics', 'MetricsBase', 'pt', 'inch', 'cm', 'mm', 'dp', 'sp', from os import environ from kivy.utils import reify, platform from kivy.properties import dpi2px +from kivy.setupconfig import USE_SDL2 def pt(value): @@ -158,8 +159,13 @@ class MetricsBase(object): return float(custom_dpi) if platform == 'android': - import android - return android.get_dpi() + if USE_SDL2: + import jnius + Hardware = jnius.autoclass('org.renpy.android.Hardware') + return Hardware.getDPI() + else: + import android + return android.get_dpi() elif platform == 'ios': import ios return ios.get_dpi() @@ -217,8 +223,12 @@ class MetricsBase(object): if platform == 'android': from jnius import autoclass - PythonActivity = autoclass('org.renpy.android.PythonActivity') - config = PythonActivity.mActivity.getResources().getConfiguration() + if USE_SDL2: + PythonActivity = autoclass('org.kivy.android.PythonActivity') + config = PythonActivity.mActivity.getResources().getConfiguration() + else: + PythonActivity = autoclass('org.renpy.android.PythonActivity') + config = PythonActivity.mActivity.getResources().getConfiguration() return config.fontScale return 1.0 diff --git a/setup.py b/setup.py index a220ff8e2..476d67b57 100644 --- a/setup.py +++ b/setup.py @@ -373,10 +373,11 @@ if platform not in ('ios', 'android') and (c_options['use_gstreamer'] c_options['use_gstreamer'] = True -# detect SDL2, only on desktop and iOS +# detect SDL2, only on desktop and iOS, or android if explicitly enabled # works if we forced the options or in autodetection sdl2_flags = {} -if platform not in ('android',) and c_options['use_sdl2'] in (None, True): +if c_options['use_sdl2'] or ( + platform not in ('android',) and c_options['use_sdl2'] is None): if c_options['use_osx_frameworks'] and platform == 'darwin': # check the existence of frameworks