Created
June 25, 2017 13:26
-
-
Save tsengvn/1fb73846748e66c957f9e4bdb8a97451 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.tsengvn.pcs.ui.main | |
import android.Manifest | |
import android.app.Activity | |
import android.content.Intent | |
import android.net.Uri | |
import android.os.Bundle | |
import android.provider.MediaStore | |
import android.support.v7.app.AppCompatActivity | |
import android.util.Log | |
import android.webkit.ValueCallback | |
import android.webkit.WebChromeClient | |
import android.webkit.WebView | |
import android.webkit.WebViewClient | |
import com.tsengvn.pcs.ui.upload.CameraActivity | |
import com.tsengvn.pcs.ui.upload.UploadActivity | |
import com.tsengvn.pcs.util.ValidationUtils | |
import permissions.dispatcher.NeedsPermission | |
import permissions.dispatcher.RuntimePermissions | |
import java.io.File | |
/** | |
* @author hienngo | |
* @since 11/11/16 | |
*/ | |
@RuntimePermissions | |
class WebViewActivity : AppCompatActivity() { | |
var callback : ValueCallback<Array<Uri>>? = null | |
var tempFile : Uri? = null | |
var currentUrl : String = "" | |
lateinit var webview : WebView | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
ValidationUtils.createTempFolder() | |
webview = WebView(this) | |
webview.settings.javaScriptEnabled = true | |
val webChromeClient = object : WebChromeClient() { | |
override fun onShowFileChooser(webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams?): Boolean { | |
Log.v("@nmh", "onShowFileChooser") | |
WebViewActivityPermissionsDispatcher.openImageSelectorWithCheck(this@WebViewActivity) | |
callback = filePathCallback | |
return true | |
} | |
} | |
val webviewClient = object : WebViewClient() { | |
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { | |
if (url!!.contains("Home.aspx")) { | |
finish() | |
return true | |
} | |
return super.shouldOverrideUrlLoading(view, url) | |
} | |
override fun onPageFinished(view: WebView?, url: String?) { | |
super.onPageFinished(view, url) | |
currentUrl = url ?: "" | |
Log.v("@nmh", "finish $url") | |
} | |
} | |
webview.setWebChromeClient(webChromeClient) | |
webview.setWebViewClient(webviewClient) | |
setContentView(webview) | |
var url = intent.getStringExtra("url") | |
webview.loadUrl(url) | |
} | |
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { | |
super.onActivityResult(requestCode, resultCode, data) | |
if (requestCode == 1) { | |
if (resultCode == Activity.RESULT_OK) { | |
val filePath = data?.getStringExtra("path") | |
callback?.onReceiveValue(arrayOf(Uri.fromFile(File(filePath)))) | |
} else { | |
callback?.onReceiveValue(null) | |
} | |
callback = null | |
} else if (requestCode == 999) { | |
callback?.onReceiveValue(arrayOf(tempFile!!)) | |
} | |
} | |
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { | |
super.onRequestPermissionsResult(requestCode, permissions, grantResults) | |
WebViewActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults) | |
} | |
@NeedsPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA) | |
fun openImageSelector() { | |
if (currentUrl.contains(other = "Camera.aspx?from=UpdateINT", ignoreCase = true) || currentUrl.contains("Camera.aspx?from=UpdateTL", ignoreCase = true)) { | |
openCustomCamera() | |
} else { | |
openNativeCamera() | |
} | |
} | |
internal fun openCustomCamera() { | |
val intent = Intent(this, CameraActivity::class.java) | |
startActivityForResult(intent, UploadActivity.REQ_CAMERA) | |
} | |
internal fun openNativeCamera() { | |
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) | |
if (takePictureIntent.resolveActivity(packageManager) != null) { | |
tempFile = Uri.fromFile(ValidationUtils.generateTempImageFile()) | |
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempFile) | |
startActivityForResult(takePictureIntent, 999) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment