teleposter/app/src/main/java/telegra/ph/MainActivity.kt

132 lines
3.4 KiB
Kotlin

package telegra.ph
import android.content.Intent
import android.graphics.Bitmap
import android.os.Build
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem
import com.afollestad.materialdialogs.MaterialDialog
import im.delight.android.webview.AdvancedWebView
class MainActivity : AppCompatActivity(), AdvancedWebView.Listener {
private val TELEGRAPH = "http://telegra.ph/"
private val webView: AdvancedWebView? by lazy { findViewById(R.id.webView) as AdvancedWebView }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
webView?.setListener(this, this)
webView?.apply {
setMixedContentAllowed(true)
setCookiesEnabled(true)
setThirdPartyCookiesEnabled(true)
addPermittedHostname("telegra.ph")
}
// Check if app is opened to show special page
var urlToLoad = TELEGRAPH
if (intent.action == Intent.ACTION_VIEW && !intent.dataString.isNullOrBlank() && intent.dataString.contains("telegra.ph"))
urlToLoad = intent.dataString
// Load URL
webView?.loadUrl(urlToLoad)
}
override fun onPageFinished(url: String?) {
}
override fun onPageStarted(url: String?, favicon: Bitmap?) {
}
override fun onPageError(errorCode: Int, description: String?, failingUrl: String?) {
}
override fun onDownloadRequested(url: String?, suggestedFilename: String?, mimeType: String?, contentLength: Long, contentDisposition: String?, userAgent: String?) {
}
override fun onExternalPageRequest(url: String?) {
AdvancedWebView.Browsers.openUrl(this, url)
}
override fun onResume() {
super.onResume()
webView?.onResume()
}
override fun onPause() {
webView?.onPause()
super.onPause()
}
override fun onDestroy() {
webView?.onDestroy()
super.onDestroy()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
webView?.onActivityResult(requestCode, resultCode, data)
}
override fun onBackPressed() {
if (webView?.onBackPressed() == false) return
else super.onBackPressed()
}
override fun onActionModeStarted(mode: ActionMode?) {
val menu = mode?.menu
mode?.menuInflater?.inflate(R.menu.formatting, menu)
menu?.findItem(R.id.format)?.apply {
setOnMenuItemClickListener {
executeJavaScript("javascript:showFormatTooltip();")
false
}
}
super.onActionModeStarted(mode)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
super.onCreateOptionsMenu(menu)
menuInflater.inflate(R.menu.activity_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.share -> {
val shareIntent = Intent()
shareIntent.action = Intent.ACTION_SEND
shareIntent.type = "text/plain"
shareIntent.putExtra(Intent.EXTRA_TITLE, webView?.title)
shareIntent.putExtra(Intent.EXTRA_TEXT, webView?.url)
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)))
true
}
R.id.help -> {
MaterialDialog.Builder(this)
.title(R.string.help)
.content(R.string.help_text)
.show()
true
}
else -> super.onOptionsItemSelected(item)
}
}
private fun executeJavaScript(code: String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView?.evaluateJavascript(code, null)
} else {
webView?.loadUrl(code)
}
}
}