diff options
Diffstat (limited to 'src/android/jar')
7 files changed, 160 insertions, 54 deletions
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 a8bf4c15e1..dba407c0b1 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; @@ -480,8 +482,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, @@ -502,8 +506,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, @@ -519,8 +525,10 @@ public class QtNative if (m_started) { setDisplayMetrics(screenWidthPixels, screenHeightPixels, - desktopWidthPixels, - desktopHeightPixels, + availableLeftPixels, + availableTopPixels, + availableWidthPixels, + availableHeightPixels, XDpi, YDpi, scaledDensity, @@ -528,8 +536,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; @@ -704,14 +714,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(); } @@ -790,13 +795,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(); } @@ -1167,8 +1172,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)) { |