diff options
Diffstat (limited to 'src/android/java/src/org/qtproject/qt5')
4 files changed, 62 insertions, 30 deletions
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 40db7941aa..dd94d6267a 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 @@ -1079,11 +1079,6 @@ public class QtActivity extends Activity QtNative.activityDelegate().resetSoftwareKeyboard(); } - public void updateInputItemRectangle(final int x, final int y, final int w, final int h) - { - QtNative.activityDelegate().updateInputItemRectangle(x, y, w, h); - } - public boolean setKeyboardVisibility(boolean visibility, long timeStamp) { return QtNative.activityDelegate().setKeyboardVisibility(visibility, timeStamp); @@ -1095,10 +1090,10 @@ public class QtActivity extends Activity } public void showSoftwareKeyboard(final int x, final int y, final int width, - final int height, final int editorHeight, - final int inputHints, final int enterKeyType) + final int height, final int inputHints, + final int enterKeyType) { - QtNative.activityDelegate().showSoftwareKeyboard(x, y, width, height, editorHeight, inputHints, enterKeyType); + QtNative.activityDelegate().showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType); } public boolean startApplication() @@ -1127,20 +1122,26 @@ public class QtActivity extends Activity QtNative.activityDelegate().setFullScreen(enterFullScreen); } - public void notifyAccessibilityLocationChange() + public void notifyAccessibilityLocationChange(int viewId) { - QtNative.activityDelegate().notifyAccessibilityLocationChange(); + QtNative.activityDelegate().notifyAccessibilityLocationChange(viewId); } - public void notifyObjectHide(int viewId) + public void notifyObjectHide(int viewId, int parentId) { - QtNative.activityDelegate().notifyObjectHide(viewId); + QtNative.activityDelegate().notifyObjectHide(viewId, parentId); } public void notifyObjectFocus(int viewId) { QtNative.activityDelegate().notifyObjectFocus(viewId); } + + public void notifyValueChanged(int viewId, String value) + { + QtNative.activityDelegate().notifyValueChanged(viewId, value); + } + public boolean isKeyboardVisible() { return QtNative.activityDelegate().isKeyboardVisible(); diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java index c3074c353e..3a8fb34863 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java @@ -47,6 +47,7 @@ import android.os.Build; import android.os.Bundle; import android.view.Window; +import org.qtproject.qt5.android.QtNative; import java.lang.reflect.Field; @@ -140,8 +141,20 @@ public class QtActivityLoader extends QtLoader { m_activity.requestWindowFeature(Window.FEATURE_ACTION_BAR); - if (QtApplication.m_delegateObject != null && QtApplication.onCreate != null) { - QtApplication.invokeDelegateMethod(QtApplication.onCreate, savedInstanceState); + if (QtNative.isStarted()) { + boolean updated = QtNative.activityDelegate().updateActivity(m_activity); + if (!updated) { + // could not update the activity so restart the application + Intent intent = Intent.makeRestartActivityTask(m_activity.getComponentName()); + m_activity.startActivity(intent); + QtNative.quitApp(); + Runtime.getRuntime().exit(0); + } + + // there can only be a valid delegate object if the QtNative was started. + if (QtApplication.m_delegateObject != null && QtApplication.onCreate != null) + QtApplication.invokeDelegateMethod(QtApplication.onCreate, savedInstanceState); + return; } @@ -150,20 +163,20 @@ public class QtActivityLoader extends QtLoader { ENVIRONMENT_VARIABLES += "\tQT_ANDROID_THEME=" + QT_ANDROID_DEFAULT_THEME + "/\tQT_ANDROID_THEME_DISPLAY_DPI=" + m_displayDensity + "\t"; - if (null == m_activity.getLastNonConfigurationInstance()) { - if (m_contextInfo.metaData.containsKey("android.app.background_running") - && m_contextInfo.metaData.getBoolean("android.app.background_running")) { - ENVIRONMENT_VARIABLES += "QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED=0\t"; - } else { - ENVIRONMENT_VARIABLES += "QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED=1\t"; - } - if (m_contextInfo.metaData.containsKey("android.app.auto_screen_scale_factor") - && m_contextInfo.metaData.getBoolean("android.app.auto_screen_scale_factor")) { - ENVIRONMENT_VARIABLES += "QT_AUTO_SCREEN_SCALE_FACTOR=1\t"; - } + if (m_contextInfo.metaData.containsKey("android.app.background_running") + && m_contextInfo.metaData.getBoolean("android.app.background_running")) { + ENVIRONMENT_VARIABLES += "QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED=0\t"; + } else { + ENVIRONMENT_VARIABLES += "QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED=1\t"; + } - startApp(true); + if (m_contextInfo.metaData.containsKey("androi.app.auto_screen_scale_factor") + && m_contextInfo.metaData.getBoolean("android.app.auto_screen_scale_factor")) { + ENVIRONMENT_VARIABLES += "QT_AUTO_SCREEN_SCALE_FACTOR=1\t"; } + + startApp(true); + } } diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java index 1e72aa3841..9b4feb9f91 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java @@ -37,6 +37,7 @@ package org.qtproject.qt5.android.bindings; import android.app.AlertDialog; +import android.app.Dialog; import android.content.ComponentName; import android.content.Context; import android.content.ContextWrapper; @@ -226,7 +227,9 @@ public abstract class QtLoader { // fatal error, show the error and quit AlertDialog errorDialog = new AlertDialog.Builder(m_context).create(); errorDialog.setMessage(loaderParams.getString(ERROR_MESSAGE_KEY)); - errorDialog.setButton(m_context.getResources().getString(android.R.string.ok), new DialogInterface.OnClickListener() { + errorDialog.setButton(Dialog.BUTTON_POSITIVE, + m_context.getResources().getString(android.R.string.ok), + new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); @@ -281,7 +284,9 @@ public abstract class QtLoader { else errorDialog.setMessage("Fatal error, your application can't be started."); - errorDialog.setButton(m_context.getResources().getString(android.R.string.ok), new DialogInterface.OnClickListener() { + errorDialog.setButton(Dialog.BUTTON_POSITIVE, + m_context.getResources().getString(android.R.string.ok), + new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); @@ -347,7 +352,9 @@ public abstract class QtLoader { else errorDialog.setMessage("Can't find Ministro service.\nThe application can't start."); - errorDialog.setButton(m_context.getResources().getString(android.R.string.ok), new DialogInterface.OnClickListener() { + errorDialog.setButton(Dialog.BUTTON_POSITIVE, + m_context.getResources().getString(android.R.string.ok), + new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java index 67ced7524c..9fc8aaa181 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java @@ -37,6 +37,7 @@ package org.qtproject.qt5.android.bindings; import android.app.Service; +import android.util.Log; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; @@ -54,7 +55,17 @@ public class QtService extends Service /////////////// PLEASE DO NOT CHANGE THE FOLLOWING CODE ////////////////////////// ////////////////////////////////////////////////////////////////////////////////// protected void onCreateHook() { - m_loader.onCreate(); + // the application has already started + // do not reload everything again + if (QtNative.isStarted()) { + m_loader = null; + Log.w(QtNative.QtTAG, + "A QtService tried to start in the same process as an initiated " + + "QtActivity. That is not supported. This results in the service " + + "functioning as an Android Service detached from Qt."); + } else { + m_loader.onCreate(); + } } @Override public void onCreate() |