diff options
Diffstat (limited to 'src/android/java/src/org')
5 files changed, 85 insertions, 33 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 b27f03fc7d..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,18 +1122,33 @@ 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(); + } + + public void notifyQtAndroidPluginRunning(boolean running) + { + QtNative.activityDelegate().notifyQtAndroidPluginRunning(running); + } } 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/QtApplication.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java index 47dcde304c..749b9ac4a9 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java @@ -102,9 +102,7 @@ public class QtApplication extends Application } } } - } catch (Exception e) { - e.printStackTrace(); - } + } catch (Exception e) { } } } 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 cdd6c1efea..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,10 +37,14 @@ 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; import android.os.IBinder; +import org.qtproject.qt5.android.QtNative; + public class QtService extends Service { QtServiceLoader m_loader = new QtServiceLoader(this); @@ -51,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() @@ -153,4 +167,14 @@ public class QtService extends Service return super.onUnbind(intent); } //--------------------------------------------------------------------------- + + public boolean loadApplication(Service service, ClassLoader classLoader, Bundle loaderParams) + { + return QtNative.serviceDelegate().loadApplication(service, classLoader, loaderParams); + } + + public boolean startApplication() + { + return QtNative.serviceDelegate().startApplication(); + } } |