Skip to content

Instantly share code, notes, and snippets.

@tsengvn
Created June 25, 2017 13:26
Show Gist options
  • Save tsengvn/1fb73846748e66c957f9e4bdb8a97451 to your computer and use it in GitHub Desktop.
Save tsengvn/1fb73846748e66c957f9e4bdb8a97451 to your computer and use it in GitHub Desktop.
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