summaryrefslogtreecommitdiffstats
path: root/src/android/jar
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/jar')
-rw-r--r--src/android/jar/AndroidManifest.xml1
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java106
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java11
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java66
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtSurface.java103
5 files changed, 118 insertions, 169 deletions
diff --git a/src/android/jar/AndroidManifest.xml b/src/android/jar/AndroidManifest.xml
index ebc6fcfea7..cef88f7f19 100644
--- a/src/android/jar/AndroidManifest.xml
+++ b/src/android/jar/AndroidManifest.xml
@@ -1,4 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="org.qtproject.qt5.android">
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
+ <uses-sdk android:minSdkVersion="9" />
</manifest>
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 d8c560933f..6c71bed7bc 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -1,7 +1,7 @@
/****************************************************************************
**
+** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Android port of the Qt Toolkit.
@@ -73,6 +73,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
public class QtActivityDelegate
@@ -105,7 +106,7 @@ public class QtActivityDelegate
private int m_lastChar = 0;
private boolean m_fullScreen = false;
private boolean m_started = false;
- private QtSurface m_surface = null;
+ private HashMap<Integer, QtSurface> m_surfaces = null;
private QtLayout m_layout = null;
private QtEditText m_editText = null;
private InputMethodManager m_imm = null;
@@ -116,21 +117,6 @@ public class QtActivityDelegate
public boolean m_backKeyPressedSent = false;
- public QtLayout getQtLayout()
- {
- return m_layout;
- }
-
- public QtSurface getQtSurface()
- {
- return m_surface;
- }
-
- public void redrawWindow(int left, int top, int right, int bottom)
- {
- m_surface.drawBitmap(new Rect(left, top, right, bottom));
- }
-
public void setFullScreen(boolean enterFullScreen)
{
if (m_fullScreen == enterFullScreen)
@@ -175,6 +161,7 @@ public class QtActivityDelegate
}
}
}
+ m_layout.requestLayout();
}
@@ -233,7 +220,8 @@ public class QtActivityDelegate
{
if (m_imm == null)
return;
- if (height > m_surface.getHeight()*2/3)
+
+ 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);
@@ -330,7 +318,7 @@ public class QtActivityDelegate
{
if (m_imm == null)
return;
- m_imm.hideSoftInputFromWindow(m_editText.getWindowToken(), 0, new ResultReceiver( new Handler()){
+ m_imm.hideSoftInputFromWindow(m_editText.getWindowToken(), 0, new ResultReceiver(new Handler()) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
switch (resultCode) {
@@ -358,7 +346,7 @@ public class QtActivityDelegate
if (size < 36 || size > 512) { // check size sanity
DisplayMetrics metrics = new DisplayMetrics();
a.getWindowManager().getDefaultDisplay().getMetrics(metrics);
- size = metrics.densityDpi/10*3;
+ size = metrics.densityDpi / 10 * 3;
if (size < 36)
size = 36;
@@ -626,13 +614,13 @@ public class QtActivityDelegate
m_applicationParameters += "\t-qmljsdebugger=" + qmljsdebugger;
}
- if (null == m_surface)
+ if (null == m_surfaces)
onCreate(null);
String nativeLibraryDir = QtNativeLibrariesDir.nativeLibrariesDir(m_activity);
- m_surface.applicationStarted( QtNative.startApplication(m_applicationParameters,
- m_environmentVariables,
- m_mainLib,
- nativeLibraryDir));
+ QtNative.startApplication(m_applicationParameters,
+ m_environmentVariables,
+ m_mainLib,
+ nativeLibraryDir);
m_started = true;
return true;
} catch (Exception e) {
@@ -657,14 +645,12 @@ public class QtActivityDelegate
metrics.xdpi, metrics.ydpi, metrics.scaledDensity);
}
m_layout = new QtLayout(m_activity);
- m_surface = new QtSurface(m_activity, 0);
m_editText = new QtEditText(m_activity, this);
m_imm = (InputMethodManager)m_activity.getSystemService(Context.INPUT_METHOD_SERVICE);
- m_layout.addView(m_surface, 0);
+ m_surfaces = new HashMap<Integer, QtSurface>();
m_activity.setContentView(m_layout,
- new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.FILL_PARENT));
- m_layout.bringChildToFront(m_surface);
+ new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT));
m_activity.registerForContextMenu(m_layout);
int orientation = m_activity.getResources().getConfiguration().orientation;
@@ -704,18 +690,6 @@ public class QtActivityDelegate
}
}
- public void onRestoreInstanceState(Bundle savedInstanceState)
- {
- try {
- m_super_onRestoreInstanceState.invoke(m_activity, savedInstanceState);
- } catch (Exception e) {
- e.printStackTrace();
- }
- m_started = savedInstanceState.getBoolean("Started");
- if (m_started)
- m_surface.applicationStarted(true);
- }
-
public void onPause()
{
QtNative.updateApplicationState(ApplicationInactive);
@@ -768,6 +742,19 @@ public class QtActivityDelegate
}
outState.putBoolean("FullScreen", m_fullScreen);
outState.putBoolean("Started", m_started);
+ // It should never
+ }
+
+ public void onRestoreInstanceState(Bundle savedInstanceState)
+ {
+ try {
+ m_super_onRestoreInstanceState.invoke(m_activity, savedInstanceState);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ m_started = savedInstanceState.getBoolean("Started");
+ // FIXME restore all surfaces
+
}
public boolean onKeyDown(int keyCode, KeyEvent event)
@@ -967,4 +954,39 @@ public class QtActivityDelegate
}
}
}
+
+ public void createSurface(int id, boolean onTop, int x, int y, int w, int h) {
+ if (m_surfaces.containsKey(id))
+ m_layout.removeView(m_surfaces.remove(id));
+
+ QtSurface surface = new QtSurface(m_activity, id, onTop);
+ if (w < 0 || h < 0) {
+ surface.setLayoutParams( new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT));
+ } else {
+ surface.setLayoutParams( new QtLayout.LayoutParams(w, h, x, y));
+ }
+
+ m_layout.addView(surface);
+ if (onTop)
+ m_layout.bringChildToFront(surface);
+ m_surfaces.put(id, surface);
+ }
+
+ public void setSurfaceGeometry(int id, int x, int y, int w, int h) {
+ if (!m_surfaces.containsKey(id)) {
+ Log.e(QtNative.QtTAG, "Surface " + id +" not found!");
+ return;
+ }
+ QtSurface surface = m_surfaces.get(id);
+ surface.setLayoutParams(new QtLayout.LayoutParams(w, h, x, y));
+ m_layout.requestLayout();
+ }
+
+ public void destroySurface(int id) {
+ if (m_surfaces.containsKey(id))
+ m_layout.removeView(m_surfaces.remove(id));
+ else
+ Log.e(QtNative.QtTAG, "Surface " + id +" not found!");
+ }
}
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 043dab5ce8..058b10750f 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -42,8 +42,10 @@
package org.qtproject.qt5.android;
+import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
+import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
@@ -65,6 +67,15 @@ 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);
+ }
+
+ @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int count = getChildCount();
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 57f3642b56..2437752545 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -1,7 +1,7 @@
/****************************************************************************
**
+** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Android port of the Qt Toolkit.
@@ -250,29 +250,10 @@ public class QtNative
}
}
- public static void pauseApplication()
- {
- synchronized (m_mainActivityMutex) {
- if (m_started)
- pauseQtApp();
- }
- }
- public static void resumeApplication()
- {
- synchronized (m_mainActivityMutex) {
- if (m_started) {
- resumeQtApp();
- updateWindow();
- }
- }
- }
// application methods
public static native void startQtApplication(String params, String env);
- public static native void startQtApp(String params, String env);
- public static native void pauseQtApp();
- public static native void resumeQtApp();
public static native boolean startQtAndroidPlugin();
public static native void quitQtAndroidPlugin();
public static native void terminateQt();
@@ -283,16 +264,6 @@ public class QtNative
m_activity.finish();
}
- private static void redrawSurface(final int left, final int top, final int right, final int bottom )
- {
- runAction(new Runnable() {
- @Override
- public void run() {
- m_activityDelegate.redrawWindow(left, top, right, bottom);
- }
- });
- }
-
//@ANDROID-9
static private int getAction(int index, MotionEvent event)
{
@@ -539,6 +510,36 @@ public class QtNative
return certificateArray;
}
+ private static void createSurface(final int id, final boolean onTop, final int x, final int y, final int w, final int h)
+ {
+ runAction(new Runnable() {
+ @Override
+ public void run() {
+ m_activityDelegate.createSurface(id, onTop, x, y, w, h);
+ }
+ });
+ }
+
+ private static void setSurfaceGeometry(final int id, final int x, final int y, final int w, final int h)
+ {
+ runAction(new Runnable() {
+ @Override
+ public void run() {
+ m_activityDelegate.setSurfaceGeometry(id, x, y, w, h);
+ }
+ });
+ }
+
+ private static void destroySurface(final int id)
+ {
+ runAction(new Runnable() {
+ @Override
+ public void run() {
+ m_activityDelegate.destroySurface(id);
+ }
+ });
+ }
+
// screen methods
public static native void setDisplayMetrics(int screenWidthPixels,
int screenHeightPixels,
@@ -567,10 +568,7 @@ public class QtNative
// keyboard methods
// surface methods
- public static native void destroySurface();
- public static native void setSurface(Object surface);
- public static native void lockSurface();
- public static native void unlockSurface();
+ public static native void setSurface(int id, Object surface, int w, int h);
// surface methods
// window methods
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
index c499dc3898..f9f5f16845 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
@@ -1,7 +1,7 @@
/****************************************************************************
**
+** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Android port of the Qt Toolkit.
@@ -44,11 +44,7 @@ package org.qtproject.qt5.android;
import android.app.Activity;
import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Rect;
import android.graphics.PixelFormat;
-import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
@@ -60,61 +56,34 @@ import java.lang.reflect.Method;
public class QtSurface extends SurfaceView implements SurfaceHolder.Callback
{
- private Bitmap m_bitmap = null;
- private boolean m_started = false;
- private boolean m_usesGL = false;
private GestureDetector m_gestureDetector;
private Object m_accessibilityDelegate = null;
+ private boolean m_onTop;
- public QtSurface(Context context, int id)
+ public QtSurface(Context context, int id, boolean onTop)
{
super(context);
setFocusable(false);
setFocusableInTouchMode(false);
-
+ m_onTop = onTop;
+ setZOrderMediaOverlay(onTop);
getHolder().addCallback(this);
+ getHolder().setFormat(PixelFormat.RGBA_8888);
getHolder().setType(SurfaceHolder.SURFACE_TYPE_GPU);
setId(id);
m_gestureDetector =
new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent event) {
- if (!m_started)
- return;
QtNative.longPress(getId(), (int) event.getX(), (int) event.getY());
}
});
m_gestureDetector.setIsLongpressEnabled(true);
}
- public void applicationStarted(boolean usesGL)
- {
- m_started = true;
- m_usesGL = usesGL;
- if (getWidth() < 1 || getHeight() < 1)
- return;
- if (m_usesGL) {
- QtNative.setSurface(getHolder().getSurface());
- } else {
- QtNative.lockSurface();
- QtNative.setSurface(null);
- m_bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.RGB_565);
- QtNative.setSurface(m_bitmap);
- QtNative.unlockSurface();
- }
- }
-
@Override
public void surfaceCreated(SurfaceHolder holder)
{
- DisplayMetrics metrics = new DisplayMetrics();
- ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
- QtNative.setApplicationDisplayMetrics(metrics.widthPixels,
- metrics.heightPixels, getWidth(), getHeight(), metrics.xdpi, metrics.ydpi, metrics.scaledDensity);
-
- if (m_usesGL)
- holder.setFormat(PixelFormat.RGBA_8888);
-
-
+ QtNative.setSurface(getId(), holder.getSurface(), getWidth(), getHeight());
// Initialize Accessibility
// The accessibility code depends on android API level 16, so dynamically resolve it
if (android.os.Build.VERSION.SDK_INT >= 16) {
@@ -158,71 +127,21 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
- if (width<1 || height<1)
- return;
-
- DisplayMetrics metrics = new DisplayMetrics();
- ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
- QtNative.setApplicationDisplayMetrics(metrics.widthPixels,
- metrics.heightPixels,
- width,
- height,
- metrics.xdpi,
- metrics.ydpi,
- metrics.scaledDensity);
-
- if (!m_started)
+ if (width < 1 || height < 1)
return;
- if (m_usesGL) {
- QtNative.setSurface(holder.getSurface());
- } else {
- QtNative.lockSurface();
- QtNative.setSurface(null);
- m_bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
- QtNative.setSurface(m_bitmap);
- QtNative.unlockSurface();
- QtNative.updateWindow();
- }
+ QtNative.setSurface(getId(), holder.getSurface(), width, height);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
- if (m_usesGL) {
- QtNative.destroySurface();
- } else {
- if (!m_started)
- return;
-
- QtNative.lockSurface();
- QtNative.setSurface(null);
- QtNative.unlockSurface();
- }
- }
-
- public void drawBitmap(Rect rect)
- {
- if (!m_started)
- return;
- QtNative.lockSurface();
- if (null != m_bitmap) {
- try {
- Canvas cv = getHolder().lockCanvas(rect);
- cv.drawBitmap(m_bitmap, rect, rect, null);
- getHolder().unlockCanvasAndPost(cv);
- } catch (Exception e) {
- Log.e(QtNative.QtTAG, "Can't create main activity", e);
- }
- }
- QtNative.unlockSurface();
+ QtNative.setSurface(getId(), null, 0, 0);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
- if (!m_started)
- return false;
QtNative.sendTouchEvent(event, getId());
m_gestureDetector.onTouchEvent(event);
return true;
@@ -231,8 +150,6 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback
@Override
public boolean onTrackballEvent(MotionEvent event)
{
- if (!m_started)
- return false;
QtNative.sendTrackballEvent(event, getId());
return true;
}