diff options
Diffstat (limited to 'src/android')
-rw-r--r-- | src/android/CMakeLists.txt | 14 | ||||
-rw-r--r-- | src/android/jar/.prev_CMakeLists.txt | 30 | ||||
-rw-r--r-- | src/android/jar/CMakeLists.txt | 31 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java | 6 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java | 63 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtLayout.java | 31 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 51 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java | 2 | ||||
-rw-r--r-- | src/android/java/CMakeLists.txt | 12 | ||||
-rw-r--r-- | src/android/java/res/layout/splash.xml | 4 | ||||
-rw-r--r-- | src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java | 9 | ||||
-rw-r--r-- | src/android/templates/CMakeLists.txt | 19 |
12 files changed, 207 insertions, 65 deletions
diff --git a/src/android/CMakeLists.txt b/src/android/CMakeLists.txt new file mode 100644 index 0000000000..a821cee44b --- /dev/null +++ b/src/android/CMakeLists.txt @@ -0,0 +1,14 @@ +# Generated from android.pro. + +# special case skip regeneration +# special case begin +# Only build jars during Android build and install the templates for the +# androiddeployqt tool. +# android +if (ANDROID) + add_subdirectory(jar) + add_subdirectory(java) + add_subdirectory(templates) +endif() +# special case end + diff --git a/src/android/jar/.prev_CMakeLists.txt b/src/android/jar/.prev_CMakeLists.txt new file mode 100644 index 0000000000..f4c807c33a --- /dev/null +++ b/src/android/jar/.prev_CMakeLists.txt @@ -0,0 +1,30 @@ +# Generated from jar.pro. + +set(java_sources + src/org/qtproject/qt5/android//accessibility/QtAccessibilityDelegate.java + src/org/qtproject/qt5/android//accessibility/QtNativeAccessibility.java + src/org/qtproject/qt5/android//CursorHandle.java + src/org/qtproject/qt5/android//EditContextView.java + src/org/qtproject/qt5/android//EditPopupMenu.java + src/org/qtproject/qt5/android//ExtractStyle.java + src/org/qtproject/qt5/android//QtActivityDelegate.java + src/org/qtproject/qt5/android//QtEditText.java + src/org/qtproject/qt5/android//QtInputConnection.java + src/org/qtproject/qt5/android//QtLayout.java + src/org/qtproject/qt5/android//QtMessageDialogHelper.java + src/org/qtproject/qt5/android//QtNative.java + src/org/qtproject/qt5/android//QtNativeLibrariesDir.java + src/org/qtproject/qt5/android//QtSurface.java + src/org/qtproject/qt5/android//QtThread.java +) + +add_jar(QtAndroid + INCLUDE_JARS ${QT_ANDROID_JAR} + SOURCES ${java_sources} +) + +install_jar(QtAndroid + DESTINATION jar + COMPONENT Devel +) + diff --git a/src/android/jar/CMakeLists.txt b/src/android/jar/CMakeLists.txt new file mode 100644 index 0000000000..61af168a67 --- /dev/null +++ b/src/android/jar/CMakeLists.txt @@ -0,0 +1,31 @@ +# Generated from jar.pro. + +set(java_sources + src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java + src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java + src/org/qtproject/qt5/android/CursorHandle.java + src/org/qtproject/qt5/android/EditContextView.java + src/org/qtproject/qt5/android/EditPopupMenu.java + src/org/qtproject/qt5/android/ExtractStyle.java + src/org/qtproject/qt5/android/QtActivityDelegate.java + src/org/qtproject/qt5/android/QtEditText.java + src/org/qtproject/qt5/android/QtInputConnection.java + src/org/qtproject/qt5/android/QtLayout.java + src/org/qtproject/qt5/android/QtMessageDialogHelper.java + src/org/qtproject/qt5/android/QtNative.java + src/org/qtproject/qt5/android/QtNativeLibrariesDir.java + src/org/qtproject/qt5/android/QtSurface.java + src/org/qtproject/qt5/android/QtThread.java + src/org/qtproject/qt5/android/QtServiceDelegate.java # special case +) + +add_jar(QtAndroid + INCLUDE_JARS ${QT_ANDROID_JAR} + SOURCES ${java_sources} +) + +install_jar(QtAndroid + DESTINATION jar + COMPONENT Devel +) + diff --git a/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java b/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java index e6de354ac4..ae06506c96 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java +++ b/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java @@ -673,7 +673,7 @@ public class ExtractStyle { json.put("gradient",gradientStateClass.getField("mGradient").getInt(obj)); GradientDrawable.Orientation orientation=(Orientation) gradientStateClass.getField("mOrientation").get(obj); json.put("orientation",orientation.name()); - int [] intArray=(int[]) gradientStateClass.getField((Build.VERSION.SDK_INT < 23) ? "mColors" : "mGradientColors").get(obj); + int [] intArray=(int[]) gradientStateClass.getField("mGradientColors").get(obj); if (intArray != null) json.put("colors",getJsonArray(intArray, 0, intArray.length)); json.put("positions",getJsonArray((float[]) gradientStateClass.getField("mPositions").get(obj))); @@ -1089,9 +1089,7 @@ public class ExtractStyle { { try { InsetDrawable d = (InsetDrawable)drawable; - // mInsetState changed to mState in Android 5.1 (22) - Object mInsetStateObject = getAccessibleField(InsetDrawable.class, (Build.VERSION.SDK_INT > 21) ? "mState" - : "mInsetState").get(d); + Object mInsetStateObject = getAccessibleField(InsetDrawable.class, "mState").get(d); Rect _padding = new Rect(); boolean hasPadding = d.getPadding(_padding); return getDrawable(getAccessibleField(mInsetStateObject.getClass(), "mDrawable").get(mInsetStateObject), filename, hasPadding ? _padding : null); diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 2df2ed9a1d..0db9441749 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -121,6 +121,10 @@ public class QtActivityDelegate private static final String EXTRACT_STYLE_KEY = "extract.android.style"; private static final String EXTRACT_STYLE_MINIMAL_KEY = "extract.android.style.option"; + public static final int SYSTEM_UI_VISIBILITY_NORMAL = 0; + public static final int SYSTEM_UI_VISIBILITY_FULLSCREEN = 1; + public static final int SYSTEM_UI_VISIBILITY_TRANSLUCENT = 2; + private static String m_environmentVariables = null; private static String m_applicationParameters = null; @@ -131,7 +135,7 @@ public class QtActivityDelegate private long m_metaState; private int m_lastChar = 0; private int m_softInputMode = 0; - private boolean m_fullScreen = false; + private int m_systemUiVisibility = SYSTEM_UI_VISIBILITY_NORMAL; private boolean m_started = false; private HashMap<Integer, QtSurface> m_surfaces = null; private HashMap<Integer, View> m_nativeViews = null; @@ -153,38 +157,51 @@ public class QtActivityDelegate private CursorHandle m_rightSelectionHandle; private EditPopupMenu m_editPopupMenu; - public void setFullScreen(boolean enterFullScreen) + + public void setSystemUiVisibility(int systemUiVisibility) { - if (m_fullScreen == enterFullScreen) + if (m_systemUiVisibility == systemUiVisibility) return; - if (m_fullScreen = enterFullScreen) { + m_systemUiVisibility = systemUiVisibility; + + int systemUiVisibilityFlags = 0; + switch (m_systemUiVisibility) { + case SYSTEM_UI_VISIBILITY_NORMAL: + m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + systemUiVisibilityFlags = View.SYSTEM_UI_FLAG_VISIBLE; + break; + case SYSTEM_UI_VISIBILITY_FULLSCREEN: m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); - try { - int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE; - flags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; - flags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; - flags |= View.SYSTEM_UI_FLAG_FULLSCREEN; - flags |= View.class.getDeclaredField("SYSTEM_UI_FLAG_IMMERSIVE_STICKY").getInt(null); - m_activity.getWindow().getDecorView().setSystemUiVisibility(flags | View.INVISIBLE); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + systemUiVisibilityFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.INVISIBLE; + break; + case SYSTEM_UI_VISIBILITY_TRANSLUCENT: + m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN + | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION + | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - m_activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); - } + systemUiVisibilityFlags = View.SYSTEM_UI_FLAG_VISIBLE; + break; + }; + + m_activity.getWindow().getDecorView().setSystemUiVisibility(systemUiVisibilityFlags); + m_layout.requestLayout(); } public void updateFullScreen() { - if (m_fullScreen) { - m_fullScreen = false; - setFullScreen(true); + if (m_systemUiVisibility == SYSTEM_UI_VISIBILITY_FULLSCREEN) { + m_systemUiVisibility = SYSTEM_UI_VISIBILITY_NORMAL; + setSystemUiVisibility(SYSTEM_UI_VISIBILITY_FULLSCREEN); } } @@ -943,7 +960,7 @@ public class QtActivityDelegate } catch (Exception e) { e.printStackTrace(); } - outState.putBoolean("FullScreen", m_fullScreen); + outState.putInt("SystemUiVisibility", m_systemUiVisibility); outState.putBoolean("Started", m_started); // It should never } diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java index f22b8176c8..63993f81b5 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java @@ -46,6 +46,7 @@ import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; +import android.view.WindowInsets; public class QtLayout extends ViewGroup { @@ -69,10 +70,32 @@ public class QtLayout extends ViewGroup @Override protected void onSizeChanged (int w, int h, int oldw, int oldh) { - DisplayMetrics metrics = new DisplayMetrics(); - ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); - QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h, - metrics.xdpi, metrics.ydpi, metrics.scaledDensity, metrics.density); + WindowInsets insets = getRootWindowInsets(); + + DisplayMetrics realMetrics = new DisplayMetrics(); + ((Activity) getContext()).getWindowManager().getDefaultDisplay().getRealMetrics(realMetrics); + + boolean isFullScreenView = h == realMetrics.heightPixels; + + int insetLeft = isFullScreenView ? insets.getSystemWindowInsetLeft() : 0; + int insetTop = isFullScreenView ? insets.getSystemWindowInsetTop() : 0; + int insetRight = isFullScreenView ? insets.getSystemWindowInsetRight() : 0; + int insetBottom = isFullScreenView ? insets.getSystemWindowInsetBottom() : 0; + + int usableAreaWidth = w - insetLeft - insetRight; + int usableAreaHeight = h - insetTop - insetBottom; + + QtNative.setApplicationDisplayMetrics(realMetrics.widthPixels, + realMetrics.heightPixels, + insetLeft, + insetTop, + usableAreaWidth, + usableAreaHeight, + realMetrics.xdpi, + realMetrics.ydpi, + realMetrics.scaledDensity, + realMetrics.density); + if (m_startApplicationRunnable != null) { m_startApplicationRunnable.run(); m_startApplicationRunnable = null; diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 76ecbe043b..b9457af6ef 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -96,8 +96,10 @@ public class QtNative private static boolean m_started = false; private static int m_displayMetricsScreenWidthPixels = 0; private static int m_displayMetricsScreenHeightPixels = 0; - private static int m_displayMetricsDesktopWidthPixels = 0; - private static int m_displayMetricsDesktopHeightPixels = 0; + private static int m_displayMetricsAvailableLeftPixels = 0; + private static int m_displayMetricsAvailableTopPixels = 0; + private static int m_displayMetricsAvailableWidthPixels = 0; + private static int m_displayMetricsAvailableHeightPixels = 0; private static double m_displayMetricsXDpi = .0; private static double m_displayMetricsYDpi = .0; private static double m_displayMetricsScaledDensity = 1.0; @@ -485,8 +487,10 @@ public class QtNative res[0] = startQtAndroidPlugin(qtParams, environment); setDisplayMetrics(m_displayMetricsScreenWidthPixels, m_displayMetricsScreenHeightPixels, - m_displayMetricsDesktopWidthPixels, - m_displayMetricsDesktopHeightPixels, + m_displayMetricsAvailableLeftPixels, + m_displayMetricsAvailableTopPixels, + m_displayMetricsAvailableWidthPixels, + m_displayMetricsAvailableHeightPixels, m_displayMetricsXDpi, m_displayMetricsYDpi, m_displayMetricsScaledDensity, @@ -507,8 +511,10 @@ public class QtNative public static void setApplicationDisplayMetrics(int screenWidthPixels, int screenHeightPixels, - int desktopWidthPixels, - int desktopHeightPixels, + int availableLeftPixels, + int availableTopPixels, + int availableWidthPixels, + int availableHeightPixels, double XDpi, double YDpi, double scaledDensity, @@ -524,8 +530,10 @@ public class QtNative if (m_started) { setDisplayMetrics(screenWidthPixels, screenHeightPixels, - desktopWidthPixels, - desktopHeightPixels, + availableLeftPixels, + availableTopPixels, + availableWidthPixels, + availableHeightPixels, XDpi, YDpi, scaledDensity, @@ -533,8 +541,10 @@ public class QtNative } else { m_displayMetricsScreenWidthPixels = screenWidthPixels; m_displayMetricsScreenHeightPixels = screenHeightPixels; - m_displayMetricsDesktopWidthPixels = desktopWidthPixels; - m_displayMetricsDesktopHeightPixels = desktopHeightPixels; + m_displayMetricsAvailableLeftPixels = availableLeftPixels; + m_displayMetricsAvailableTopPixels = availableTopPixels; + m_displayMetricsAvailableWidthPixels = availableWidthPixels; + m_displayMetricsAvailableHeightPixels = availableHeightPixels; m_displayMetricsXDpi = XDpi; m_displayMetricsYDpi = YDpi; m_displayMetricsScaledDensity = scaledDensity; @@ -709,14 +719,9 @@ public class QtNative synchronized (m_mainActivityMutex) { Context context = getContext(); try { - if (Build.VERSION.SDK_INT >= 23) { - if (m_checkSelfPermissionMethod == null) - m_checkSelfPermissionMethod = Context.class.getMethod("checkSelfPermission", String.class); - perm = (Integer)m_checkSelfPermissionMethod.invoke(context, permission); - } else { - final PackageManager pm = context.getPackageManager(); - perm = pm.checkPermission(permission, context.getApplicationContext().getPackageName()); - } + if (m_checkSelfPermissionMethod == null) + m_checkSelfPermissionMethod = Context.class.getMethod("checkSelfPermission", String.class); + perm = (Integer)m_checkSelfPermissionMethod.invoke(context, permission); } catch (Exception e) { e.printStackTrace(); } @@ -795,13 +800,13 @@ public class QtNative }); } - private static void setFullScreen(final boolean fullScreen) + private static void setSystemUiVisibility(final int systemUiVisibility) { runAction(new Runnable() { @Override public void run() { if (m_activityDelegate != null) { - m_activityDelegate.setFullScreen(fullScreen); + m_activityDelegate.setSystemUiVisibility(systemUiVisibility); } updateWindow(); } @@ -1172,8 +1177,10 @@ public class QtNative // screen methods public static native void setDisplayMetrics(int screenWidthPixels, int screenHeightPixels, - int desktopWidthPixels, - int desktopHeightPixels, + int availableLeftPixels, + int availableTopPixels, + int availableWidthPixels, + int availableHeightPixels, double XDpi, double YDpi, double scaledDensity, diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java index 33bcb364de..4cceab50c7 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java @@ -115,7 +115,7 @@ public class QtServiceDelegate QtNative.setService(m_service, this); QtNative.setClassLoader(classLoader); - QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0); + QtNative.setApplicationDisplayMetrics(10, 10, 0, 0, 10, 10, 120, 120, 1.0, 1.0); if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) { for (String className: loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY)) { diff --git a/src/android/java/CMakeLists.txt b/src/android/java/CMakeLists.txt new file mode 100644 index 0000000000..1c24bd5e82 --- /dev/null +++ b/src/android/java/CMakeLists.txt @@ -0,0 +1,12 @@ +# Android Java Resource files + +# special case skip regeneration +# special case begin +set(resource_directories + res + src) + +qt_install(DIRECTORY ${resource_directories} + DESTINATION src/android/java + COMPONENT Devel) +# special case end diff --git a/src/android/java/res/layout/splash.xml b/src/android/java/res/layout/splash.xml deleted file mode 100644 index 476d91a844..0000000000 --- a/src/android/java/res/layout/splash.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent" /> diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java index 3348527b3c..86775619ec 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java @@ -93,13 +93,8 @@ public class QtActivity extends Activity public QtActivity() { m_loader = new QtActivityLoader(this); - if (Build.VERSION.SDK_INT >= 21) { - QT_ANDROID_THEMES = new String[] {"Theme_Holo_Light"}; - QT_ANDROID_DEFAULT_THEME = "Theme_Holo_Light"; - } else { - QT_ANDROID_THEMES = new String[] {"Theme_DeviceDefault_Light"}; - QT_ANDROID_DEFAULT_THEME = "Theme_DeviceDefault_Light"; - } + QT_ANDROID_THEMES = new String[] {"Theme_Holo_Light"}; + QT_ANDROID_DEFAULT_THEME = "Theme_Holo_Light"; } diff --git a/src/android/templates/CMakeLists.txt b/src/android/templates/CMakeLists.txt new file mode 100644 index 0000000000..8e007b7215 --- /dev/null +++ b/src/android/templates/CMakeLists.txt @@ -0,0 +1,19 @@ +# Android template files + +# special case skip regeneration +# special case begin +set(template_files + AndroidManifest.xml + build.gradle) + +set(template_directories + res) + +qt_install(FILES ${template_files} + DESTINATION src/android/templates + COMPONENT Devel) + +qt_install(DIRECTORY ${template_directories} + DESTINATION src/android/templates + COMPONENT Devel) +# special case end |