Commit d3c899e3765fc832d9e33aab99525dcfbb5436d0
1 parent
d3ab3fb9
Exists in
master
and in
5 other branches
Testando envio de mensagems jni<->android
Showing
4 changed files
with
149 additions
and
36 deletions
Show diff stats
android/jni/main.cpp
@@ -28,6 +28,7 @@ | @@ -28,6 +28,7 @@ | ||
28 | 28 | ||
29 | #include "globals.h" | 29 | #include "globals.h" |
30 | #include <lib3270/session.h> | 30 | #include <lib3270/session.h> |
31 | + #include <lib3270/popup.h> | ||
31 | 32 | ||
32 | /*--[ Defines ]--------------------------------------------------------------------------------------*/ | 33 | /*--[ Defines ]--------------------------------------------------------------------------------------*/ |
33 | 34 | ||
@@ -57,25 +58,47 @@ static void post_message(H3270 *session, int msgid, int arg1 = 0, int arg2 = 0) | @@ -57,25 +58,47 @@ static void post_message(H3270 *session, int msgid, int arg1 = 0, int arg2 = 0) | ||
57 | JNIEnv * env = ((INFO *) session->widget)->env; | 58 | JNIEnv * env = ((INFO *) session->widget)->env; |
58 | jobject obj = ((INFO *) session->widget)->obj; | 59 | jobject obj = ((INFO *) session->widget)->obj; |
59 | jclass cls = env->GetObjectClass(obj); | 60 | jclass cls = env->GetObjectClass(obj); |
60 | - jmethodID mid = env->GetMethodID(cls, "post_message", "(III)V");; | 61 | + jmethodID mid = env->GetMethodID(cls, "postMessage", "(III)V");; |
61 | env->CallVoidMethod(obj,mid,(jint) msgid, (jint) arg1, (jint) arg2); | 62 | env->CallVoidMethod(obj,mid,(jint) msgid, (jint) arg1, (jint) arg2); |
62 | } | 63 | } |
63 | } | 64 | } |
64 | 65 | ||
65 | static void update_status(H3270 *session, LIB3270_MESSAGE id) | 66 | static void update_status(H3270 *session, LIB3270_MESSAGE id) |
66 | { | 67 | { |
67 | - post_message(session,0,id); | 68 | + post_message(session,1,id); |
68 | } | 69 | } |
69 | 70 | ||
70 | static void changed(H3270 *session, int offset, int len) | 71 | static void changed(H3270 *session, int offset, int len) |
71 | { | 72 | { |
72 | - post_message(session,1,offset,len); | 73 | + post_message(session,2,offset,len); |
74 | +} | ||
75 | + | ||
76 | +static int popuphandler(H3270 *session, void *terminal, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) | ||
77 | +{ | ||
78 | + if(session->widget) | ||
79 | + { | ||
80 | + JNIEnv * env = ((INFO *) session->widget)->env; | ||
81 | + jobject obj = ((INFO *) session->widget)->obj; | ||
82 | + jclass cls = env->GetObjectClass(obj); | ||
83 | + jmethodID mid = env->GetMethodID(cls, "postPopup", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); | ||
84 | + char * descr; | ||
85 | + | ||
86 | + descr = lib3270_vsprintf(fmt, args); | ||
87 | + | ||
88 | + env->CallVoidMethod(obj,mid, (jint) type, | ||
89 | + env->NewStringUTF(title), | ||
90 | + env->NewStringUTF(msg), | ||
91 | + env->NewStringUTF(descr) ); | ||
92 | + lib3270_free(descr); | ||
93 | + } | ||
73 | } | 94 | } |
74 | 95 | ||
75 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) | 96 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) |
76 | { | 97 | { |
77 | H3270 * session = lib3270_session_new(""); | 98 | H3270 * session = lib3270_session_new(""); |
78 | 99 | ||
100 | + lib3270_set_popup_handler(popuphandler); | ||
101 | + | ||
79 | session->changed = changed; | 102 | session->changed = changed; |
80 | session->update_status = update_status; | 103 | session->update_status = update_status; |
81 | 104 |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<resources> | ||
3 | + | ||
4 | + <string name="hello">Hello World, PW3270Activity!</string> | ||
5 | + <string name="app_name">PW3270</string> | ||
6 | + <string-array name="program_msg"> | ||
7 | + <item>LIB3270_MESSAGE_NONE</item> | ||
8 | + <item>LIB3270_MESSAGE_SYSWAIT</item> | ||
9 | + <item>LIB3270_MESSAGE_TWAIT</item> | ||
10 | + <item>LIB3270_MESSAGE_CONNECTED</item> | ||
11 | + <item>LIB3270_MESSAGE_DISCONNECTED</item> | ||
12 | + <item>LIB3270_MESSAGE_AWAITING_FIRST</item> | ||
13 | + <item>LIB3270_MESSAGE_MINUS</item> | ||
14 | + <item>LIB3270_MESSAGE_PROTECTED</item> | ||
15 | + <item>LIB3270_MESSAGE_NUMERIC</item> | ||
16 | + <item>LIB3270_MESSAGE_OVERFLOW</item> | ||
17 | + <item>LIB3270_MESSAGE_INHIBIT</item> | ||
18 | + <item>LIB3270_MESSAGE_KYBDLOCK</item> | ||
19 | + <item>LIB3270_MESSAGE_X</item> | ||
20 | + <item>LIB3270_MESSAGE_RESOLVING</item> | ||
21 | + <item>LIB3270_MESSAGE_CONNECTING</item> | ||
22 | + </string-array> | ||
23 | + | ||
24 | + | ||
25 | +</resources> | ||
0 | \ No newline at end of file | 26 | \ No newline at end of file |
android/src/br/com/bb/pw3270/PW3270Activity.java
@@ -6,6 +6,7 @@ import android.widget.TextView; | @@ -6,6 +6,7 @@ import android.widget.TextView; | ||
6 | import android.widget.Button; | 6 | import android.widget.Button; |
7 | import android.widget.EditText; | 7 | import android.widget.EditText; |
8 | import android.view.View; | 8 | import android.view.View; |
9 | +import android.content.res.*; | ||
9 | 10 | ||
10 | public class PW3270Activity extends Activity implements View.OnClickListener | 11 | public class PW3270Activity extends Activity implements View.OnClickListener |
11 | { | 12 | { |
@@ -20,24 +21,34 @@ public class PW3270Activity extends Activity implements View.OnClickListener | @@ -20,24 +21,34 @@ public class PW3270Activity extends Activity implements View.OnClickListener | ||
20 | 21 | ||
21 | } | 22 | } |
22 | 23 | ||
23 | - protected void update_message(int id) | 24 | + protected void updateProgramMessage(int id) |
24 | { | 25 | { |
25 | - this.view.setText("ID=" + id); | 26 | + this.view.setText(message[id]); |
27 | + } | ||
28 | + | ||
29 | + public void popupMessage(int type, String title, String text, String info) | ||
30 | + { | ||
31 | + this.view.setText(title + "\n" + text + "\n" + info); | ||
26 | } | 32 | } |
27 | 33 | ||
28 | 34 | ||
29 | }; | 35 | }; |
30 | 36 | ||
31 | - terminal host; | ||
32 | - EditText uri; | 37 | + private terminal host; |
38 | + private EditText uri; | ||
39 | + private Resources res; | ||
40 | + private String[] message; | ||
33 | 41 | ||
34 | /** Called when the activity is first created. */ | 42 | /** Called when the activity is first created. */ |
35 | @Override | 43 | @Override |
36 | - public void onCreate(Bundle savedInstanceState) { | 44 | + public void onCreate(Bundle savedInstanceState) |
45 | + { | ||
37 | super.onCreate(savedInstanceState); | 46 | super.onCreate(savedInstanceState); |
38 | setContentView(R.layout.main); | 47 | setContentView(R.layout.main); |
39 | 48 | ||
40 | - uri = (EditText) findViewById(R.id.hostname); | 49 | + res = getResources(); |
50 | + message = res.getStringArray(R.array.program_msg); | ||
51 | + uri = (EditText) findViewById(R.id.hostname); | ||
41 | 52 | ||
42 | // Set button | 53 | // Set button |
43 | Button btn = (Button) findViewById(R.id.connect); | 54 | Button btn = (Button) findViewById(R.id.connect); |
@@ -50,7 +61,7 @@ public class PW3270Activity extends Activity implements View.OnClickListener | @@ -50,7 +61,7 @@ public class PW3270Activity extends Activity implements View.OnClickListener | ||
50 | public void onClick(View v) | 61 | public void onClick(View v) |
51 | { | 62 | { |
52 | // Perform action on click | 63 | // Perform action on click |
53 | - host.setHost(uri.getText().toString()); | 64 | + // host.setHost(uri.getText().toString()); |
54 | host.connect(); | 65 | host.connect(); |
55 | } | 66 | } |
56 | 67 |
android/src/br/com/bb/pw3270/lib3270.java
@@ -8,8 +8,8 @@ import android.os.Message; | @@ -8,8 +8,8 @@ import android.os.Message; | ||
8 | 8 | ||
9 | public class lib3270 | 9 | public class lib3270 |
10 | { | 10 | { |
11 | - NetworkThread terminal; | ||
12 | - | 11 | + private NetworkThread mainloop; |
12 | + | ||
13 | static | 13 | static |
14 | { | 14 | { |
15 | System.loadLibrary("3270"); | 15 | System.loadLibrary("3270"); |
@@ -18,29 +18,46 @@ public class lib3270 | @@ -18,29 +18,46 @@ public class lib3270 | ||
18 | 18 | ||
19 | lib3270() | 19 | lib3270() |
20 | { | 20 | { |
21 | - terminal = new NetworkThread(handler); | 21 | + mainloop = null; |
22 | + } | ||
23 | + | ||
24 | + private class popupMessageInfo | ||
25 | + { | ||
26 | + public String title; | ||
27 | + public String text; | ||
28 | + public String info; | ||
29 | + | ||
30 | + popupMessageInfo(String title, String text, String info) | ||
31 | + { | ||
32 | + this.title = title; | ||
33 | + this.text = text; | ||
34 | + this.info = info; | ||
35 | + } | ||
22 | } | 36 | } |
23 | 37 | ||
24 | // Main Thread | 38 | // Main Thread |
25 | - private class NetworkThread extends Thread | 39 | + private class NetworkThread extends Thread |
26 | { | 40 | { |
27 | Handler mHandler; | 41 | Handler mHandler; |
28 | - | ||
29 | - NetworkThread(Handler h) | 42 | + |
43 | + NetworkThread(Handler h) | ||
30 | { | 44 | { |
31 | mHandler = h; | 45 | mHandler = h; |
32 | } | 46 | } |
33 | - | 47 | + |
34 | public void run() | 48 | public void run() |
35 | { | 49 | { |
36 | - postMessage(0,99,0); | ||
37 | -/* | 50 | + postMessage(0,1,0); |
51 | + postPopup(0,"titulo","texto","info"); | ||
52 | + | ||
53 | + /* | ||
38 | do_connect(); | 54 | do_connect(); |
39 | while(isConnected()) | 55 | while(isConnected()) |
40 | processEvents(); | 56 | processEvents(); |
41 | -*/ | 57 | + */ |
58 | + postMessage(0,0,0); | ||
42 | } | 59 | } |
43 | - | 60 | + |
44 | public void postMessage(int what, int arg1, int arg2) | 61 | public void postMessage(int what, int arg1, int arg2) |
45 | { | 62 | { |
46 | Message msg = mHandler.obtainMessage(); | 63 | Message msg = mHandler.obtainMessage(); |
@@ -49,39 +66,77 @@ public class lib3270 | @@ -49,39 +66,77 @@ public class lib3270 | ||
49 | msg.arg2 = arg2; | 66 | msg.arg2 = arg2; |
50 | mHandler.sendMessage(msg); | 67 | mHandler.sendMessage(msg); |
51 | } | 68 | } |
52 | - | 69 | + |
70 | + public void postPopup(int type, String title, String text, String info) | ||
71 | + { | ||
72 | + Message msg = mHandler.obtainMessage(); | ||
73 | + | ||
74 | + msg.what = 3; | ||
75 | + msg.arg1 = type; | ||
76 | + msg.obj = new popupMessageInfo(title,text,info); | ||
77 | + mHandler.sendMessage(msg); | ||
78 | + } | ||
79 | + | ||
53 | } | 80 | } |
54 | - | 81 | + |
82 | + public void postMessage(int what, int arg1, int arg2) | ||
83 | + { | ||
84 | + mainloop.postMessage(what, arg1, arg2); | ||
85 | + } | ||
86 | + | ||
55 | // Define the Handler that receives messages from the thread and update the progress | 87 | // Define the Handler that receives messages from the thread and update the progress |
56 | - final Handler handler = new Handler() | 88 | + final Handler handler = new Handler() |
57 | { | 89 | { |
58 | public void handleMessage(Message msg) | 90 | public void handleMessage(Message msg) |
59 | { | 91 | { |
60 | switch(msg.what) | 92 | switch(msg.what) |
61 | { | 93 | { |
62 | - case 0: | ||
63 | - update_message(msg.arg1); | 94 | + case 0: // Start/Stop service thread |
95 | + if(msg.arg1 == 0) | ||
96 | + { | ||
97 | + mainloop = null; | ||
98 | + } | ||
99 | + break; | ||
100 | + | ||
101 | + case 1: // OIA message has changed | ||
102 | + updateProgramMessage(msg.arg1); | ||
103 | + break; | ||
104 | + | ||
105 | + case 2: // Screen changed | ||
106 | + break; | ||
107 | + | ||
108 | + case 3: // Popup | ||
109 | + popupMessageInfo popup = (popupMessageInfo) msg.obj; | ||
110 | + popupMessage(msg.arg1, popup.title, popup.text, popup.info); | ||
111 | + | ||
64 | break; | 112 | break; |
65 | - | ||
66 | } | 113 | } |
67 | } | 114 | } |
68 | }; | 115 | }; |
69 | - | 116 | + |
70 | /*---[ Signal methods ]--------------------------------------------------*/ | 117 | /*---[ Signal methods ]--------------------------------------------------*/ |
71 | - | ||
72 | - protected void update_message(int id) | 118 | + |
119 | + protected void updateProgramMessage(int id) | ||
120 | + { | ||
121 | + } | ||
122 | + | ||
123 | + public void popupMessage(int type, String title, String text, String info) | ||
73 | { | 124 | { |
74 | } | 125 | } |
75 | - | ||
76 | 126 | ||
77 | /*---[ External methods ]------------------------------------------------*/ | 127 | /*---[ External methods ]------------------------------------------------*/ |
78 | 128 | ||
79 | public int connect() | 129 | public int connect() |
80 | { | 130 | { |
81 | - terminal.start(); | ||
82 | - return 0; | 131 | + if(mainloop == null) |
132 | + { | ||
133 | + mainloop = new NetworkThread(handler); | ||
134 | + mainloop.start(); | ||
135 | + return 0; | ||
136 | + } | ||
137 | + return -1; | ||
83 | } | 138 | } |
84 | - | 139 | + |
85 | /*---[ Native calls ]----------------------------------------------------*/ | 140 | /*---[ Native calls ]----------------------------------------------------*/ |
86 | static private native int init(); | 141 | static private native int init(); |
87 | 142 | ||
@@ -90,7 +145,6 @@ public class lib3270 | @@ -90,7 +145,6 @@ public class lib3270 | ||
90 | 145 | ||
91 | // Misc calls | 146 | // Misc calls |
92 | public native String getEncoding(); | 147 | public native String getEncoding(); |
93 | - | ||
94 | public native String getVersion(); | 148 | public native String getVersion(); |
95 | public native String getRevision(); | 149 | public native String getRevision(); |
96 | 150 | ||
@@ -100,5 +154,5 @@ public class lib3270 | @@ -100,5 +154,5 @@ public class lib3270 | ||
100 | public native boolean isConnected(); | 154 | public native boolean isConnected(); |
101 | public native boolean isTerminalReady(); | 155 | public native boolean isTerminalReady(); |
102 | 156 | ||
103 | - | 157 | + |
104 | } | 158 | } |