Some success exporting and importing apps on android.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4826 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		| @@ -2,30 +2,39 @@ package com.unprompted.tildefriends; | ||||
|  | ||||
| import android.app.Activity; | ||||
| import android.app.AlertDialog; | ||||
| import android.app.DownloadManager; | ||||
| import android.content.DialogInterface; | ||||
| import android.content.Intent; | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| import android.os.CountDownTimer; | ||||
| import android.os.Environment; | ||||
| import android.os.StrictMode; | ||||
| import android.os.SystemClock; | ||||
| import android.os.strictmode.Violation; | ||||
| import android.util.Base64; | ||||
| import android.util.Log; | ||||
| import android.view.KeyEvent; | ||||
| import android.view.View; | ||||
| import android.view.Window; | ||||
| import android.webkit.CookieManager; | ||||
| import android.webkit.DownloadListener; | ||||
| import android.webkit.JsResult; | ||||
| import android.webkit.URLUtil; | ||||
| import android.webkit.ValueCallback; | ||||
| import android.webkit.WebChromeClient; | ||||
| import android.webkit.WebResourceRequest; | ||||
| import android.webkit.WebView; | ||||
| import android.webkit.WebViewClient; | ||||
| import android.widget.Button; | ||||
| import android.widget.TextView; | ||||
| import android.widget.Toast; | ||||
| import java.io.BufferedInputStream; | ||||
| import java.io.BufferedReader; | ||||
| import java.io.File; | ||||
| import java.io.FileInputStream; | ||||
| import java.io.FileOutputStream; | ||||
| import java.io.OutputStream; | ||||
| import java.io.FileReader; | ||||
| import java.io.InputStream; | ||||
| import java.lang.Process; | ||||
| @@ -44,6 +53,9 @@ public class MainActivity extends Activity { | ||||
| 	Process process; | ||||
| 	Thread thread; | ||||
|  | ||||
| 	private ValueCallback<Uri[]> upload_message; | ||||
| 	private final static int FILECHOOSER_RESULT = 1; | ||||
|  | ||||
| 	@Override | ||||
| 	protected void onCreate(Bundle savedInstanceState) { | ||||
| 		StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() | ||||
| @@ -134,6 +146,38 @@ public class MainActivity extends Activity { | ||||
| 		web_view.getSettings().setDatabaseEnabled(true); | ||||
| 		web_view.getSettings().setDomStorageEnabled(true); | ||||
|  | ||||
| 		web_view.setDownloadListener(new DownloadListener() { | ||||
| 			public void onDownloadStart(String url, String userAgent, String content_disposition, String mime_type, long content_length) { | ||||
| 				Log.w("tildefriends", "Let's download: " + url + " (" + content_disposition + ")"); | ||||
| 				String file_name = URLUtil.guessFileName(url, content_disposition, mime_type); | ||||
| 				if (url.startsWith("data:") && url.indexOf(',') != -1) { | ||||
| 					String b64 = url.substring(url.indexOf(',') + 1); | ||||
| 					byte[] data = Base64.decode(b64, Base64.DEFAULT); | ||||
| 					Log.w("tildefriends", "Downloaded " + data.length + " bytes."); | ||||
| 					File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); | ||||
| 					try (OutputStream stream = new FileOutputStream(new File(path, file_name))) { | ||||
| 						stream.write(data); | ||||
| 					} catch (java.io.IOException e) { | ||||
| 						Log.w("tildefriends", "IOException: " + e.toString()); | ||||
| 					} | ||||
| 					Toast.makeText(getApplicationContext(), "Downloaded File", Toast.LENGTH_LONG).show(); | ||||
| 				} else { | ||||
| 					DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); | ||||
| 					request.setMimeType(mime_type); | ||||
| 					String cookies = CookieManager.getInstance().getCookie(url); | ||||
| 					request.addRequestHeader("cookie", cookies); | ||||
| 					request.addRequestHeader("User-Agent", userAgent); | ||||
| 					request.setDescription("Downloading file..."); | ||||
| 					request.setTitle(file_name); | ||||
| 					request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); | ||||
| 					request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, content_disposition, mime_type)); | ||||
| 					DownloadManager dm = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); | ||||
| 					dm.enqueue(request); | ||||
| 					Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show(); | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
|  | ||||
| 		web_view.setWebChromeClient(new WebChromeClient() { | ||||
| 			@Override | ||||
| 			public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { | ||||
| @@ -159,6 +203,21 @@ public class MainActivity extends Activity { | ||||
| 				return true; | ||||
| 			} | ||||
|  | ||||
| 			/* | ||||
| 			** https://stackoverflow.com/questions/5907369/file-upload-in-webview | ||||
| 			** https://stackoverflow.com/questions/8586691/how-to-open-file-save-dialog-in-android | ||||
| 			*/ | ||||
|  | ||||
| 			@Override | ||||
| 			public boolean onShowFileChooser(WebView view, ValueCallback<Uri[]> message, WebChromeClient.FileChooserParams params) { | ||||
| 				upload_message = message; | ||||
| 				Intent intent = new Intent(Intent.ACTION_GET_CONTENT); | ||||
| 				intent.addCategory(Intent.CATEGORY_OPENABLE); | ||||
| 				intent.setType("*/*"); | ||||
| 				MainActivity.this.startActivityForResult(Intent.createChooser(intent, "File Chooser"), MainActivity.FILECHOOSER_RESULT); | ||||
| 				return true; | ||||
| 			} | ||||
|  | ||||
| 			@Override | ||||
| 			public boolean onConsoleMessage(android.webkit.ConsoleMessage consoleMessage) { | ||||
| 				Log.d("tildefriends", consoleMessage.message() + " -- From line " + consoleMessage.lineNumber() + " of " + consoleMessage.sourceId()); | ||||
| @@ -213,6 +272,17 @@ public class MainActivity extends Activity { | ||||
| 		web_view.restoreState(savedInstanceState); | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public void onActivityResult(int requestCode, int resultCode, Intent intent) { | ||||
| 		if (requestCode == FILECHOOSER_RESULT) { | ||||
| 			if (upload_message == null) { | ||||
| 				return; | ||||
| 			} | ||||
| 			upload_message.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent)); | ||||
| 			upload_message = null; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public boolean onKeyDown(int keyCode, KeyEvent event) { | ||||
| 		if (keyCode == KeyEvent.KEYCODE_BACK && web_view.canGoBack()) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user