summaryrefslogtreecommitdiffstats
path: root/src/android
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-11-04 20:18:14 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2015-11-04 20:18:14 +0100
commit4159ee840549df11287294f0928e90f35f3e06ff (patch)
tree4a3947e37d54bdb78b4042e9ced20dbf181b5a2c /src/android
parent59dbf1786f22ec4ac88d8f9d38cac5cfb82acaea (diff)
parentc8c39ecc37c156ac2677de09a26548dfc274b564 (diff)
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts: config.tests/unix/ptrsize.test configure src/corelib/global/qnamespace.h src/network/socket/qabstractsocket.cpp tests/auto/other/networkselftest/networkselftest.pro Change-Id: Ic78abb4a34f9068567cea876861d4220f5a07672
Diffstat (limited to 'src/android')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java25
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java34
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java18
-rw-r--r--src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java6
-rw-r--r--src/android/templates/AndroidManifest.xml4
5 files changed, 69 insertions, 18 deletions
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 f22e3d7a70..f1a5e105ad 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -250,12 +250,18 @@ public class QtActivityDelegate
if (m_imm == null)
return;
- if (m_softInputMode == 0 && height > m_layout.getHeight() * 2 / 3)
- m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
- else if (m_softInputMode == 0)
- m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
- else
+ if (m_softInputMode != 0) {
m_activity.getWindow().setSoftInputMode(m_softInputMode);
+ // softInputIsHidden is true if SOFT_INPUT_STATE_HIDDEN or SOFT_INPUT_STATE_ALWAYS_HIDDEN is set.
+ final boolean softInputIsHidden = (m_softInputMode & WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) != 0;
+ if (softInputIsHidden)
+ return;
+ } else {
+ if (height > m_layout.getHeight() * 2 / 3)
+ m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ else
+ m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
+ }
int initialCapsMode = 0;
@@ -344,8 +350,7 @@ public class QtActivityDelegate
m_editText.setImeOptions(imeOptions);
m_editText.setInputType(inputType);
- m_layout.removeView(m_editText);
- m_layout.addView(m_editText, new QtLayout.LayoutParams(width, height, x, y));
+ m_layout.setLayoutParams(m_editText, new QtLayout.LayoutParams(width, height, x, y), false);
m_editText.requestFocus();
m_editText.postDelayed(new Runnable() {
@Override
@@ -1141,12 +1146,10 @@ public class QtActivityDelegate
if (Build.VERSION.SDK_INT < 11 || w <= 0 || h <= 0) {
m_activity.openContextMenu(m_layout);
} else if (Build.VERSION.SDK_INT < 14) {
- m_layout.removeView(m_editText);
- m_layout.addView(m_editText, new QtLayout.LayoutParams(w, h, x, y));
+ m_layout.setLayoutParams(m_editText, new QtLayout.LayoutParams(w, h, x, y), false);
QtPopupMenu.getInstance().showMenu(m_editText);
} else {
- m_layout.removeView(m_editText);
- m_layout.addView(m_editText, new QtLayout.LayoutParams(w, h, x, y));
+ m_layout.setLayoutParams(m_editText, new QtLayout.LayoutParams(w, h, x, y), false);
QtPopupMenu14.getInstance().showMenu(m_editText);
}
}
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 4d7ca47dde..5181cc7e11 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -65,8 +65,8 @@ public class QtLayout extends ViewGroup
{
DisplayMetrics metrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
- QtNative.setApplicationDisplayMetrics(metrics.widthPixels,
- metrics.heightPixels, w, h, metrics.xdpi, metrics.ydpi, metrics.scaledDensity);
+ QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h,
+ metrics.xdpi, metrics.ydpi, metrics.scaledDensity, metrics.density);
if (m_startApplicationRunnable != null) {
m_startApplicationRunnable.run();
m_startApplicationRunnable = null;
@@ -216,4 +216,34 @@ public class QtLayout extends ViewGroup
invalidate();
attachViewToParent(view, index, view.getLayoutParams());
}
+
+ /**
+ * set the layout params on a child view.
+ *
+ * Note: This function adds the child view if it's not in the
+ * layout already.
+ */
+ public void setLayoutParams(final View childView,
+ final ViewGroup.LayoutParams params,
+ final boolean forceRedraw)
+ {
+ // Invalid view
+ if (childView == null)
+ return;
+
+ // Invalid params
+ if (!checkLayoutParams(params))
+ return;
+
+ // View is already in the layout and can therefore be updated
+ final boolean canUpdate = (this == childView.getParent());
+
+ if (canUpdate) {
+ childView.setLayoutParams(params);
+ if (forceRedraw)
+ invalidate();
+ } else {
+ addView(childView, params);
+ }
+ }
}
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 07ef6d657d..1b7ec8abbb 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -77,6 +77,7 @@ public class QtNative
private static double m_displayMetricsXDpi = .0;
private static double m_displayMetricsYDpi = .0;
private static double m_displayMetricsScaledDensity = 1.0;
+ private static double m_displayMetricsDensity = 1.0;
private static int m_oldx, m_oldy;
private static final int m_moveThreshold = 0;
private static ClipboardManager m_clipboardManager = null;
@@ -106,13 +107,15 @@ public class QtNative
}
}
- public static boolean openURL(String url)
+ public static boolean openURL(String url, String mime)
{
boolean ok = true;
try {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ if (!mime.isEmpty())
+ intent.setDataAndType(uri, mime);
activity().startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
@@ -229,7 +232,8 @@ public class QtNative
m_displayMetricsDesktopHeightPixels,
m_displayMetricsXDpi,
m_displayMetricsYDpi,
- m_displayMetricsScaledDensity);
+ m_displayMetricsScaledDensity,
+ m_displayMetricsDensity);
if (params.length() > 0 && !params.startsWith("\t"))
params = "\t" + params;
startQtApplication(f.getAbsolutePath() + params, environment);
@@ -244,7 +248,8 @@ public class QtNative
int desktopHeightPixels,
double XDpi,
double YDpi,
- double scaledDensity)
+ double scaledDensity,
+ double density)
{
/* Fix buggy dpi report */
if (XDpi < android.util.DisplayMetrics.DENSITY_LOW)
@@ -260,7 +265,8 @@ public class QtNative
desktopHeightPixels,
XDpi,
YDpi,
- scaledDensity);
+ scaledDensity,
+ density);
} else {
m_displayMetricsScreenWidthPixels = screenWidthPixels;
m_displayMetricsScreenHeightPixels = screenHeightPixels;
@@ -269,6 +275,7 @@ public class QtNative
m_displayMetricsXDpi = XDpi;
m_displayMetricsYDpi = YDpi;
m_displayMetricsScaledDensity = scaledDensity;
+ m_displayMetricsDensity = density;
}
}
}
@@ -621,7 +628,8 @@ public class QtNative
int desktopHeightPixels,
double XDpi,
double YDpi,
- double scaledDensity);
+ double scaledDensity,
+ double density);
public static native void handleOrientationChanged(int newRotation, int nativeOrientation);
// screen methods
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 82cd1f4464..e6527c440a 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
@@ -900,6 +900,12 @@ public class QtActivity extends Activity
} else {
ENVIRONMENT_VARIABLES += "QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED=1\t";
}
+
+ if (m_activityInfo.metaData.containsKey("android.app.auto_screen_scale_factor")
+ && m_activityInfo.metaData.getBoolean("android.app.auto_screen_scale_factor")) {
+ ENVIRONMENT_VARIABLES += "QT_AUTO_SCREEN_SCALE_FACTOR=1\t";
+ }
+
startApp(true);
}
}
diff --git a/src/android/templates/AndroidManifest.xml b/src/android/templates/AndroidManifest.xml
index ad240956ef..262a5f6dba 100644
--- a/src/android/templates/AndroidManifest.xml
+++ b/src/android/templates/AndroidManifest.xml
@@ -44,6 +44,10 @@
signal is sent! -->
<meta-data android:name="android.app.background_running" android:value="false"/>
<!-- Background running -->
+
+ <!-- auto screen scale factor -->
+ <meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
+ <!-- auto screen scale factor -->
</activity>
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="14"/>