Commit 39a32f62d2dcf99cbdb4ca1f6f4d8f145888a8af

Authored by perry.werneck@gmail.com
1 parent 981b1118

Android - Simplificando classe 3270

android/Makefile
... ... @@ -86,11 +86,8 @@ pw3270-release-unsigned.apk: icons libs/armeabi/lib3270.so $(JAVASRCDIR)/*.java
86 86 libs/armeabi/lib3270.so: jni/lib3270jni.h jni/*.cpp
87 87 @$(NDKBUILD)
88 88  
89   -icons: $(foreach DIR, $(RESOLUTION), res/drawable-$(DIR)/ic_launcher.png) \
90   - $(foreach DIR, $(RESOLUTION), res/drawable-$(DIR)/ic_connect.png) \
91   - $(foreach DIR, $(RESOLUTION), res/drawable-$(DIR)/ic_disconnect.png) \
92   - $(foreach DIR, $(RESOLUTION), res/drawable-$(DIR)/ic_settings.png)
93   -
  89 +icons: $(foreach DIR, $(RESOLUTION), res/drawable-$(DIR)/ic_launcher.png)
  90 +
94 91 clean:
95 92 @rm -fr bin
96 93 @rm -fr obj
... ...
android/res/layout/menu.xml
... ... @@ -4,12 +4,11 @@
4 4 android:layout_height="match_parent" >
5 5  
6 6 <item android:id="@+id/connect"
7   - android:icon="@drawable/ic_connect"
8 7 android:title="Conectar" />
9 8 <item android:id="@+id/disconnect"
10   - android:icon="@drawable/ic_disconnect"
11 9 android:title="Desconectar" />
  10 + <item android:id="@+id/reload"
  11 + android:title="Recarregar" />
12 12 <item android:id="@+id/settings"
13   - android:icon="@drawable/ic_settings"
14 13 android:title="Configurar" />
15 14 </menu>
... ...
android/src/br/com/bb/pw3270/PW3270Activity.java
... ... @@ -32,16 +32,16 @@ package br.com.bb.pw3270;
32 32  
33 33 import android.app.Activity;
34 34 import android.os.Bundle;
35   -import android.preference.PreferenceManager;
  35 +// import android.preference.PreferenceManager;
36 36 import android.util.Log;
37 37 import android.content.Intent;
38   -import android.content.SharedPreferences;
  38 +//import android.content.SharedPreferences;
39 39 import android.content.res.*;
40   -import android.app.AlertDialog;
  40 +// import android.app.AlertDialog;
41 41 import android.webkit.WebView;
42   -import android.webkit.WebViewClient;
43   -import android.webkit.WebResourceResponse;
44   -import android.webkit.WebChromeClient;
  42 +// import android.webkit.WebViewClient;
  43 +// import android.webkit.WebResourceResponse;
  44 +// import android.webkit.WebChromeClient;
45 45 import android.app.ProgressDialog;
46 46 import android.view.Menu;
47 47 import android.view.MenuInflater;
... ... @@ -54,176 +54,45 @@ import android.view.MenuItem;
54 54 public class PW3270Activity extends Activity
55 55 {
56 56 private static final String TAG = "pw3270";
57   -
58   - private static terminal host;
  57 + private static lib3270 host = null;
59 58  
60   - private Resources res ;
61   - private WebView view;
62   - private Activity mainact = this;
63   - private ProgressDialog dlgSysMessage;
64   -
65   - private class terminal extends lib3270
66   - {
67   -
68   - terminal(SharedPreferences settings)
69   - {
70   - super(settings);
71   - }
72   -
73   - public void hideProgressDialog()
74   - {
75   - dlgSysMessage.hide();
76   - }
77   -
78   - protected void updateScreen()
79   - {
80   - view.reload();
81   - }
82   -
83   - protected boolean showProgramMessage(int id)
84   - {
85   - if(!super.showProgramMessage(id))
86   - {
87   - String message[] = res.getStringArray(R.array.program_msg);
88   - try
89   - {
90   - dlgSysMessage.setMessage(message[id]);
91   - } catch(Exception e)
92   - {
93   - dlgSysMessage.setMessage(e.getLocalizedMessage());
94   - }
95   - dlgSysMessage.show();
96   - }
97   - return true;
98   - }
99   -
100   - protected void showPopupMessage(int type, String title, String text, String info)
101   - {
102   - Log.v(TAG,"Popup Message:");
103   - Log.v(TAG,title);
104   - Log.v(TAG,text);
105   - Log.v(TAG,info);
106   -
107   - AlertDialog d = new AlertDialog.Builder(mainact).create();
108   -
109   - if(title != "")
110   - d.setTitle(title);
111   -
112   - if(text != "")
113   - d.setMessage(text);
114   -
115   - d.setCancelable(true);
116   - hideProgressDialog();
117   - d.show();
118   - }
119   -
120   - @SuppressWarnings("unused")
121   - public String getscreencontents()
122   - {
123   - String text;
124   -
125   - try
126   - {
127   - text = new String(getHTML(),getEncoding());
128   - }
129   - catch(Exception e)
130   - {
131   - Log.e(TAG,e.getLocalizedMessage());
132   - return "";
133   - }
134   -
135   - return text;
136   - }
137   -
138   - };
139 59  
140 60 /** Called when the activity is first created. */
141 61 @Override
142 62 public void onCreate(Bundle savedInstanceState)
143 63 {
144 64 super.onCreate(savedInstanceState);
145   - res = getResources();
146   - initUI();
  65 + initUI();
147 66 }
148 67  
149 68 protected void initUI()
150 69 {
151   - boolean autoconnect = false;
152   - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
153   -
  70 + if(host == null)
  71 + host = new lib3270(this);
  72 + else
  73 + host.setActivity(this);
  74 +
154 75 Log.d(TAG, "Initializing UI");
155 76  
156   - if(dlgSysMessage == null)
157   - {
  77 +// if(host.dlgSysMessage == null)
  78 +// {
158 79 // Cria dialogo para as mensagems de sistema
159   - Log.d(TAG, "Creating dlgSysMessage");
160   - dlgSysMessage = new ProgressDialog(this);
161   - dlgSysMessage.setCancelable(false);
162   - dlgSysMessage.setTitle(res.getString(R.string.wait));
163   - }
  80 +// Log.d(TAG, "Creating dlgSysMessage");
  81 + host.dlgSysMessage = new ProgressDialog(this);
  82 + host.dlgSysMessage.setCancelable(false);
  83 + host.dlgSysMessage.setTitle(host.res.getString(R.string.wait));
  84 +// }
164 85  
165   - if(host == null)
166   - {
167   - Log.d(TAG, "Creating terminal object");
168   - host = new terminal(settings);
169   - autoconnect = settings.getString("hostname","") != "" && settings.getBoolean("autoconnect",false);
170   - }
  86 +// Log.d(TAG, "Creating terminal object");
  87 +// autoconnect = settings.getString("hostname","") != "" && settings.getBoolean("autoconnect",false);
171 88  
172   - if(view == null)
173   - {
174   - // Reference:
175   - // http://developer.android.com/reference/android/webkit/WebView.html
176   - Log.d(TAG, "Creating Webview");
177   - view = new WebView(this);
178   -
179   - view.addJavascriptInterface(host, "pw3270");
180   -
181   - view.setWebChromeClient(new WebChromeClient());
182   -
183   - view.getSettings().setBuiltInZoomControls(true);
184   - view.getSettings().setSupportZoom(true);
185   - view.getSettings().setUseWideViewPort(true);
186   - view.getSettings().setLoadWithOverviewMode(true);
187   - view.getSettings().setJavaScriptEnabled(true);
188   -
189   - view.setWebViewClient(new WebViewClient()
190   - {
191   -
192   - @Override
193   - public WebResourceResponse shouldInterceptRequest(WebView view, String url)
194   - {
195   - int id = R.raw.index;
196   - String mime = "text/html";
197   - int pos = url.lastIndexOf("/");
198   -
199   - if(pos >=0 )
200   - url = url.substring(pos+1);
201   -
202   - Log.i(TAG,"Loading [" + url + "]");
203   -
204   - if(url.equalsIgnoreCase("jsmain.js"))
205   - {
206   - id = R.raw.jsmain;
207   - }
208   - else if(url.equalsIgnoreCase("theme.css"))
209   - {
210   - mime = "text/css";
211   - id = R.raw.theme;
212   - }
213   -
214   - // http://developer.android.com/reference/android/webkit/WebResourceResponse.html
215   - return new WebResourceResponse(mime,"utf-8",getResources().openRawResource(id));
216   - }
217   -
218   - });
219   - }
220   -
221   - setContentView(view);
222   - view.loadUrl("file:index.html");
223   -
224   - if(autoconnect)
225   - host.connect();
  89 + // Reference:
  90 + // http://developer.android.com/reference/android/webkit/WebView.html
  91 + Log.d(TAG, "Creating Webview");
  92 + setContentView(host.setView(new WebView(this)));
226 93  
  94 + host.view.loadUrl("file:index.html");
  95 + host.initialize();
227 96 }
228 97  
229 98 @Override
... ... @@ -250,10 +119,14 @@ public class PW3270Activity extends Activity
250 119 break;
251 120  
252 121 case R.id.settings:
253   - Intent myIntent = new Intent(view.getContext(), SettingsActivity.class);
  122 + Intent myIntent = new Intent(host.view.getContext(), SettingsActivity.class);
254 123 startActivityForResult(myIntent, 0);
255 124 break;
256 125  
  126 + case R.id.reload:
  127 + host.view.reload();
  128 + break;
  129 +
257 130 default:
258 131 return super.onOptionsItemSelected(item);
259 132 }
... ... @@ -274,7 +147,7 @@ public class PW3270Activity extends Activity
274 147 {
275 148 super.onSaveInstanceState(outState);
276 149 // Save the state of the WebView
277   - view.saveState(outState);
  150 + host.view.saveState(outState);
278 151 }
279 152  
280 153 @Override
... ... @@ -282,9 +155,8 @@ public class PW3270Activity extends Activity
282 155 {
283 156 super.onRestoreInstanceState(savedInstanceState);
284 157 // Restore the state of the WebView
285   - view.restoreState(savedInstanceState);
  158 + host.view.restoreState(savedInstanceState);
  159 + host.view.reload();
286 160 }
287   -
288   -
289 161  
290 162 }
... ...
android/src/br/com/bb/pw3270/lib3270.java
... ... @@ -30,11 +30,20 @@ package br.com.bb.pw3270;
30 30  
31 31 import java.lang.Thread;
32 32  
  33 +import android.app.Activity;
  34 +import android.app.AlertDialog;
  35 +import android.app.ProgressDialog;
33 36 import android.content.SharedPreferences;
  37 +import android.content.res.Resources;
34 38 import android.os.Handler;
35 39 import android.os.Message;
36 40 import android.os.CountDownTimer;
  41 +import android.preference.PreferenceManager;
37 42 import android.util.Log;
  43 +import android.webkit.WebChromeClient;
  44 +import android.webkit.WebResourceResponse;
  45 +import android.webkit.WebView;
  46 +import android.webkit.WebViewClient;
38 47 import javax.net.SocketFactory;
39 48 import java.net.Socket;
40 49 import javax.net.ssl.SSLSocketFactory;
... ... @@ -45,23 +54,28 @@ import java.io.DataOutputStream;
45 54  
46 55 public class lib3270
47 56 {
48   - private static final String TAG = "lib3270";
  57 + private static final String TAG = "lib3270";
49 58  
  59 + protected int screenState = -1;
50 60  
51   - protected int screenState = -1;
52   -
53   - private lib3270 hSession = this;
  61 + private lib3270 hSession = this;
  62 +
  63 + public ProgressDialog dlgSysMessage = null;
  64 + public WebView view = null;
  65 + public Resources res = null;
  66 + public Activity mainact = null;
54 67  
55   - private static NetworkThread mainloop = null;
56   - private static boolean connected = false;
57   - private static boolean reconnect = false;
58   - private static boolean refresh = true;
59   - private static Socket sock = null;
  68 + private static boolean initialized = false;
  69 + private static NetworkThread mainloop = null;
  70 + private static boolean connected = false;
  71 + private static boolean reconnect = false;
  72 + private static boolean refresh = true;
  73 + private static Socket sock = null;
60 74  
61   - private static DataOutputStream outData = null;
62   - private static DataInputStream inData = null;
  75 + private static DataOutputStream outData = null;
  76 + private static DataInputStream inData = null;
63 77  
64   - protected SharedPreferences settings;
  78 + protected SharedPreferences settings;
65 79  
66 80 // Define the Handler that receives messages from the thread
67 81 final Handler mHandler = new Handler()
... ... @@ -71,7 +85,10 @@ public class lib3270
71 85 switch (msg.what)
72 86 {
73 87 case 0: // Reconnect
74   - Log.d(TAG,"----------------------------Reconnecting");
  88 + if(!hSession.isConnected())
  89 + {
  90 + Log.d(TAG,"------------------------------------Connecting");
  91 + }
75 92 break;
76 93  
77 94 case 1: // OIA message has changed
... ... @@ -101,7 +118,7 @@ public class lib3270
101 118 break;
102 119  
103 120 case 7: // ready
104   - hideProgressDialog();
  121 + dlgSysMessage.hide();
105 122 break;
106 123  
107 124 case 8: // busy
... ... @@ -122,11 +139,11 @@ public class lib3270
122 139 System.loadLibrary("3270");
123 140 }
124 141  
125   - lib3270(SharedPreferences settings)
  142 + lib3270(Activity act)
126 143 {
127 144 String toggle[] = { "dstrace", "screentrace", "eventtrace", "reconnect" };
128 145  
129   - this.settings = settings;
  146 + setActivity(act);
130 147 this.screenState = -1;
131 148  
132 149 for(int f = 0; f < toggle.length; f++)
... ... @@ -215,7 +232,7 @@ public class lib3270
215 232 // Connecta no host
216 233 SocketFactory socketFactory;
217 234 String hostname = settings.getString("hostname","");
218   - Integer port = new Integer(settings.getString("port","23"));
  235 + Integer port = Integer.valueOf(settings.getString("port", "23"));
219 236  
220 237 if (hostname == "" || port == 0)
221 238 return false;
... ... @@ -339,9 +356,76 @@ public class lib3270
339 356 mHandler.sendMessage(msg);
340 357 }
341 358  
  359 + void initialize()
  360 + {
  361 + if(initialized)
  362 + return;
  363 +
  364 + initialized = true;
  365 +
  366 + if(settings.getString("hostname","") != "" && settings.getBoolean("autoconnect",false))
  367 + connect();
  368 + }
  369 +
  370 + void setActivity(Activity act)
  371 + {
  372 + this.mainact = act;
  373 + this.settings = PreferenceManager.getDefaultSharedPreferences(act);
  374 + this.res = act.getResources();
  375 + }
  376 +
  377 + WebView setView(WebView v)
  378 + {
  379 + this.view = v;
  380 +
  381 + view.addJavascriptInterface(this, "pw3270");
  382 +
  383 + view.setWebChromeClient(new WebChromeClient());
  384 +
  385 + view.getSettings().setBuiltInZoomControls(true);
  386 + view.getSettings().setSupportZoom(true);
  387 + view.getSettings().setUseWideViewPort(true);
  388 + view.getSettings().setLoadWithOverviewMode(true);
  389 + view.getSettings().setJavaScriptEnabled(true);
  390 +
  391 + view.setWebViewClient(new WebViewClient()
  392 + {
  393 +
  394 + @Override
  395 + public WebResourceResponse shouldInterceptRequest(WebView view, String url)
  396 + {
  397 + int id = R.raw.index;
  398 + String mime = "text/html";
  399 + int pos = url.lastIndexOf("/");
  400 +
  401 + if(pos >=0 )
  402 + url = url.substring(pos+1);
  403 +
  404 + Log.i(TAG,"Loading [" + url + "]");
  405 +
  406 + if(url.equalsIgnoreCase("jsmain.js"))
  407 + {
  408 + id = R.raw.jsmain;
  409 + }
  410 + else if(url.equalsIgnoreCase("theme.css"))
  411 + {
  412 + mime = "text/css";
  413 + id = R.raw.theme;
  414 + }
  415 +
  416 + // http://developer.android.com/reference/android/webkit/WebResourceResponse.html
  417 + return new WebResourceResponse(mime,"utf-8",mainact.getResources().openRawResource(id));
  418 + }
  419 +
  420 + });
  421 +
  422 + return view;
  423 +
  424 + }
  425 +
342 426 /*---[ Signal methods ]--------------------------------------------------*/
343 427  
344   - protected boolean showProgramMessage(int id)
  428 + protected void showProgramMessage(int id)
345 429 {
346 430 switch(id)
347 431 {
... ... @@ -350,7 +434,7 @@ public class lib3270
350 434 {
351 435 screenState = 0;
352 436 Log.v(TAG, "Status changed to NONE");
353   - updateScreen();
  437 + view.reload();
354 438 }
355 439 break;
356 440  
... ... @@ -379,14 +463,36 @@ public class lib3270
379 463 // 14 LIB3270_MESSAGE_CONNECTING
380 464  
381 465 default:
382   - return false;
  466 + String message[] = res.getStringArray(R.array.program_msg);
  467 + try
  468 + {
  469 + dlgSysMessage.setMessage(message[id]);
  470 + } catch(Exception e)
  471 + {
  472 + dlgSysMessage.setMessage(e.getLocalizedMessage());
  473 + }
  474 + dlgSysMessage.show();
383 475 }
384   -
385   - return true;
386 476 }
387 477  
388 478 protected void showPopupMessage(int type, String title, String text, String info)
389 479 {
  480 + Log.v(TAG,"Popup Message:");
  481 + Log.v(TAG,title);
  482 + Log.v(TAG,text);
  483 + Log.v(TAG,info);
  484 +
  485 + AlertDialog d = new AlertDialog.Builder(mainact).create();
  486 +
  487 + if(title != "")
  488 + d.setTitle(title);
  489 +
  490 + if(text != "")
  491 + d.setMessage(text);
  492 +
  493 + d.setCancelable(true);
  494 + dlgSysMessage.hide();
  495 + d.show();
390 496 }
391 497  
392 498 protected void info(String tag, String msg)
... ... @@ -403,10 +509,6 @@ public class lib3270
403 509 {
404 510 }
405 511  
406   - protected void updateScreen()
407   - {
408   - }
409   -
410 512 public void pfkey(int id)
411 513 {
412 514 sendPFkey(id);
... ... @@ -427,10 +529,6 @@ public class lib3270
427 529 postMessage(8, 0, 0);
428 530 }
429 531  
430   - public void hideProgressDialog()
431   - {
432   - }
433   -
434 532 public void showProgressDialog(String msg)
435 533 {
436 534 }
... ... @@ -477,6 +575,25 @@ public class lib3270
477 575 refresh = true;
478 576 }
479 577  
  578 +// @SuppressWarnings("unused")
  579 + public String getscreencontents()
  580 + {
  581 + String text;
  582 +
  583 + try
  584 + {
  585 + text = new String(getHTML(),getEncoding());
  586 + }
  587 + catch(Exception e)
  588 + {
  589 + Log.e(TAG,e.getLocalizedMessage());
  590 + return "";
  591 + }
  592 +
  593 + return text;
  594 + }
  595 +
  596 +
480 597 /*---[ Native calls ]----------------------------------------------------*/
481 598 private native int processEvents();
482 599  
... ...
src/include/lib3270/action_table.h
... ... @@ -26,7 +26,6 @@
26 26 * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça)
27 27 * licinio@bb.com.br (Licínio Luis Branco)
28 28 * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda)
30 29 *
31 30 */
32 31  
... ...