Mercurial > dwindows
changeset 2486:cec43818bd3e
Android: Implement dw_messagebox() ... seems we can't just cleanly exit().
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 27 Apr 2021 00:16:56 +0000 |
parents | a0c493abb872 |
children | 83f8f4f58a98 |
files | android/DWindows.kt android/dw.cpp |
diffstat | 2 files changed, 67 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/android/DWindows.kt Mon Apr 26 21:56:37 2021 +0000 +++ b/android/DWindows.kt Tue Apr 27 00:16:56 2021 +0000 @@ -1,13 +1,15 @@ package org.dbsoft.dwindows +import android.content.DialogInterface import android.content.pm.ActivityInfo import android.os.Bundle +import android.os.Looper import android.text.method.PasswordTransformationMethod -import android.util.Half.toFloat import android.util.Log import android.view.Gravity import android.view.View import android.widget.* +import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity @@ -76,7 +78,7 @@ var params: LinearLayout.LayoutParams = LinearLayout.LayoutParams(w, h) if(item !is LinearLayout && (width != -1 || height != -1)) { - item.measure(0,0) + item.measure(0, 0) if (width > 0) { w = width } else if(width == -1) { @@ -178,6 +180,48 @@ Log.d(null, text) } + fun messageBox(title: String, body: String, flags: Int): Int + { + // make a text input dialog and show it + var alert = AlertDialog.Builder(this) + var retval: Int = 0 + + alert.setTitle(title) + alert.setMessage(body) + if((flags and (1 shl 3)) != 0) { + alert.setPositiveButton("Yes", DialogInterface.OnClickListener { _: DialogInterface, _: Int -> + retval = 1 + throw java.lang.RuntimeException() + }); + } + if((flags and ((1 shl 1) or (1 shl 2))) != 0) { + alert.setNegativeButton("Ok", DialogInterface.OnClickListener { _: DialogInterface, _: Int -> + retval = 0 + throw java.lang.RuntimeException() + }); + } + if((flags and ((1 shl 3) or (1 shl 4))) != 0) { + alert.setNegativeButton("No", DialogInterface.OnClickListener { _: DialogInterface, _: Int -> + retval = 0 + throw java.lang.RuntimeException() + }); + } + if((flags and ((1 shl 2) or (1 shl 4))) != 0) { + alert.setNeutralButton("Cancel", DialogInterface.OnClickListener { _: DialogInterface, _: Int -> + retval = 2 + throw java.lang.RuntimeException() + }); + } + alert.show(); + + // loop till a runtime exception is triggered. + try { + Looper.loop() + } catch (e2: RuntimeException) { + } + return retval + } + /* * Native methods that are implemented by the 'dwindows' native library, * which is packaged with this application.
--- a/android/dw.cpp Mon Apr 26 21:56:37 2021 +0000 +++ b/android/dw.cpp Tue Apr 27 00:16:56 2021 +0000 @@ -592,6 +592,27 @@ */ int API dw_messagebox(const char *title, int flags, const char *format, ...) { + va_list args; + char outbuf[1025] = {0}; + JNIEnv *env; + + va_start(args, format); + vsnprintf(outbuf, 1024, format, args); + va_end(args); + + if((env = (JNIEnv *)pthread_getspecific(_dw_env_key))) + { + // Construct a String + jstring jstr = env->NewStringUTF(outbuf); + jstring jstrtitle = env->NewStringUTF(title); + // First get the class that contains the method you need to call + jclass clazz = _dw_find_class(env, DW_CLASS_NAME); + // Get the method that you want to call + jmethodID messageBox = env->GetMethodID(clazz, "messageBox", + "(Ljava/lang/String;Ljava/lang/String;I)I"); + // Call the method on the object + return env->CallIntMethod(_dw_obj, messageBox, jstrtitle, jstr, flags); + } return 0; }