Main page
## MainActivity.java
package net.igonna.androidprint; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.Window; import android.view.WindowManager; import android.webkit.JavascriptInterface; import android.webkit.WebChromeClient; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; import android.print.PrintAttributes; // for_print import android.print.PrintDocumentAdapter; // for_print import android.print.PrintJob; // for_print import android.print.PrintManager; // for_print import java.util.AbstractList; // for_print import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; public class MainActivity extends AppCompatActivity { private WebView webView; private WebView newWebView; // Àü¿ªº¯¼ö·Î ¼±¾ðÇØ¾ß "call_print_dialog" ÇÔ¼ö¿¡¼ »ç¿ë°¡´ÉÇÔ for_print edit_20210417 private BackPressCloseHandler backPressCloseHandler; // edit_20181211 private CallFromHtmlJavascriptHandler callFromHtmlJavascriptHandler; // edit_20190314 private AbstractList
printJobs; // for_print Handler handler = new Handler(); // for_print private static final String TAG = "MyWebView"; public static final String url_home = "http://androidprint.igonna.net"; private int dialog_CLOSE_no = 0; // edit_20190312 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); backPressCloseHandler = new BackPressCloseHandler(this); // edit_20181211 callFromHtmlJavascriptHandler = new CallFromHtmlJavascriptHandler(this); // edit_20190314 webView = (WebView) findViewById(R.id.webView); webView.addJavascriptInterface(new MyJavaScriptInterface(this), "MyAndroid"); // edit_20190311 WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setSupportMultipleWindows(true); webView.setWebViewClient(new WebViewClient() { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) // add code edit_20210128 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); Log.e(TAG,"shouldOverrideUrlLoading url: " + url); return false; // if true, do not move to url } }); webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onCreateWindow(final WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { //final WebView newWebView = new WebView(MainActivity.this); // add to "final" edit_20190312 newWebView = new WebView(MainActivity.this); // add to "final" edit_20190312 for_print newWebView.addJavascriptInterface(new MyJavaScriptInterface(MainActivity.this), "MyAndroidForDialog"); // edit_20190311 WebSettings webSettings = newWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setSupportMultipleWindows(true); newWebView.setScrollBarStyle(newWebView.SCROLLBARS_OUTSIDE_OVERLAY); newWebView.setScrollbarFadingEnabled(false); newWebView.setWebViewClient(new WebViewClient()); // new window open final Dialog dialog = new Dialog(MainActivity.this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // add dialog_size edit_20190221 dialog.setContentView(newWebView); WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); // add dialog_size edit_20190221 params.width = MATCH_PARENT; // add dialog_size edit_20190221 params.height= MATCH_PARENT; // add dialog_size edit_20190221 dialog.getWindow().setAttributes(params); // add dialog_size edit_20190221 dialog.show(); dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (dialog_CLOSE_no == 0) { try { // try ¹® Ãß°¡(ÇÁ¸°ÅÍ ±â´É Ãß°¡Çϸé¼...) for_print edit_20210417 if(newWebView.canGoBack()) { //Log.e(TAG,"goback ½ÇÇà"); // Log.e : ·Î±× »ö»óÀÌ º¸¶ó»öÀÓ newWebView.goBack(); } else { //Log.e(TAG,"newwebview close ½ÇÇà"); // Log.e : ·Î±× »ö»óÀÌ º¸¶ó»öÀÓ callFromHtmlJavascriptHandler.CallFromHtmlJavascript(newWebView, "window.self.close()"); // edit_20190314 //else dialog.dismiss(); // ÀÌ ÄÚµåÀÇ ¿À·ù: dialog ¸¦ óÀ½ ¶ç¿ì°í ÀÌ Äڵ尡 µ¿ÀÛÇÑ ÈÄ¿¡´Â dialog °¡ ´Ù½Ã ¾È ¶ß´Â Çö»óÀÌ ¹ßÇàÇÔ } } catch (Exception e) { Log.e(TAG,"Error as below"); // todo e.printStackTrace(); return false; } } dialog_CLOSE_no++; if (dialog_CLOSE_no == 2) dialog_CLOSE_no = 0; return true; } return false; } }); newWebView.setWebChromeClient(new WebChromeClient() { @Override public void onCloseWindow(WebView window) { dialog.dismiss(); } }); ((WebView.WebViewTransport) resultMsg.obj).setWebView(newWebView); resultMsg.sendToTarget(); return true; } }); if (savedInstanceState == null) webView.loadUrl(url_home); } public void onBackPressed() { // int keyCode, KeyEvent event backPressCloseHandler.onBackPressed(webView); } private void showGuide(String txt) { Toast.makeText(MainActivity.this, txt, Toast.LENGTH_SHORT).show(); } public class MyJavaScriptInterface { // edit_20190311 Context mContext; MyJavaScriptInterface(Context c) { mContext = c; } @JavascriptInterface public void toastLong (String message) { Toast.makeText(mContext, message, Toast.LENGTH_LONG).show(); } @JavascriptInterface public void toastShort (String message) { // Show toast for a short time Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show(); } @JavascriptInterface public String isSmartPhoneFromAppLocal(String s) { return s; } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @JavascriptInterface public void call_print_mainView() { // for_print add_20210416 Log.e(TAG,"start call_print_mainView"); webView.post(new Runnable() { @Override public void run() { createWebPrintJob(webView); webView = null; } }); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @JavascriptInterface public void call_print_dialog() { // for new window(dialog) for_print add_20210416 Log.e(TAG,"start call_print_dialog"); handler.post(new Runnable() { @Override public void run() { createWebPrintJob(newWebView); newWebView = null; } }); } } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public void createWebPrintJob(WebView webView) { // for_print PrintManager printManager = (PrintManager) MainActivity.this .getSystemService(Context.PRINT_SERVICE); String jobName = getString(R.string.app_name) + " Document"; PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName); PrintJob printJob = printManager.print(jobName, printAdapter, new PrintAttributes.Builder().build()); //printJobs.add(printJob); } }