mirror of https://github.com/jlelse/teleposter
Much progress, working on new release using the API
This commit is contained in:
parent
51842bddd0
commit
843ccc020c
|
@ -3,10 +3,10 @@ apply plugin: 'kotlin-android'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 25
|
compileSdkVersion 25
|
||||||
buildToolsVersion "25.0.0"
|
buildToolsVersion "25.0.2"
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "telegra.ph"
|
applicationId "telegra.ph"
|
||||||
minSdkVersion 13
|
minSdkVersion 15
|
||||||
targetSdkVersion 25
|
targetSdkVersion 25
|
||||||
versionCode 4
|
versionCode 4
|
||||||
versionName "0.4 beta"
|
versionName "0.4 beta"
|
||||||
|
@ -27,8 +27,11 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile 'com.android.support:appcompat-v7:25.0.1'
|
compile 'com.android.support:appcompat-v7:25.1.0'
|
||||||
|
compile 'com.android.support:recyclerview-v7:25.1.0'
|
||||||
|
compile 'com.android.support:support-v13:25.1.0'
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
compile 'com.github.delight-im:Android-AdvancedWebView:v3.0.0'
|
compile 'com.github.delight-im:Android-AdvancedWebView:v3.0.0'
|
||||||
compile 'com.afollestad.material-dialogs:core:0.9.1.0'
|
compile 'com.afollestad.material-dialogs:core:0.9.1.0'
|
||||||
|
compile 'com.afollestad:bridge:3.3.0'
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
package telegra.ph
|
||||||
|
|
||||||
|
import com.afollestad.bridge.Bridge
|
||||||
|
import org.json.JSONArray
|
||||||
|
import org.json.JSONObject
|
||||||
|
|
||||||
|
class Api {
|
||||||
|
|
||||||
|
private val ApiBase = "https://api.telegra.ph/"
|
||||||
|
|
||||||
|
fun getPage(id: String?, callback: (page: Page?) -> Unit) {
|
||||||
|
Bridge.get("${ApiBase}getPage/$id?return_content=true").asJsonObject { response, jsonObject, bridgeException ->
|
||||||
|
callback(jsonObject?.parsePage())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun JSONObject.parsePage(): Page? {
|
||||||
|
val result: Page = Page()
|
||||||
|
if (optBoolean("ok", false)) {
|
||||||
|
optJSONObject("result").let {
|
||||||
|
result.path = it.optString("path", "")
|
||||||
|
result.url = it.optString("url", "")
|
||||||
|
result.title = it.optString("title", "")
|
||||||
|
result.description = it.optString("description", "")
|
||||||
|
result.author_name = it.optString("author_name", "")
|
||||||
|
result.author_url = it.optString("author_url", "")
|
||||||
|
result.image_url = it.optString("image_url", "")
|
||||||
|
it.optJSONArray("content")?.parseContent(result)
|
||||||
|
result.views = it.optInt("views", 0)
|
||||||
|
result.can_edit = it.optBoolean("can_edit", false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun JSONArray.parseContent(result: Page) {
|
||||||
|
for (child in this) {
|
||||||
|
if (child is String) result.content += child
|
||||||
|
if (child is JSONObject) {
|
||||||
|
result.content += "<${child.optString("tag", "")}"
|
||||||
|
child.optJSONObject("attrs")?.let {
|
||||||
|
for (key in it.keys()) {
|
||||||
|
result.content += " $key=\"${it.optString(key, "")}\""
|
||||||
|
}
|
||||||
|
for (i in 0 until length()) {
|
||||||
|
result.content += "${it.names()}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.content += ">"
|
||||||
|
child.optJSONArray("children").parseContent(result)
|
||||||
|
result.content += "</${child.optString("tag", "")}>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Page(
|
||||||
|
var path: String = "",
|
||||||
|
var url: String = "",
|
||||||
|
var title: String = "",
|
||||||
|
var description: String = "",
|
||||||
|
var author_name: String = "",
|
||||||
|
var author_url: String = "",
|
||||||
|
var image_url: String = "",
|
||||||
|
var content: String = "",
|
||||||
|
var views: Int = 0,
|
||||||
|
var can_edit: Boolean = false
|
||||||
|
)
|
|
@ -0,0 +1,5 @@
|
||||||
|
package telegra.ph
|
||||||
|
|
||||||
|
import org.json.JSONArray
|
||||||
|
|
||||||
|
operator fun JSONArray.iterator(): Iterator<Any> = (0 until length()).asSequence().map { opt(it) }.iterator()
|
|
@ -2,10 +2,8 @@ package telegra.ph
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.view.ActionMode
|
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import com.afollestad.materialdialogs.MaterialDialog
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
|
@ -22,7 +20,6 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener {
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
|
|
||||||
webView?.setListener(this, this)
|
webView?.setListener(this, this)
|
||||||
|
|
||||||
webView?.apply {
|
webView?.apply {
|
||||||
setMixedContentAllowed(true)
|
setMixedContentAllowed(true)
|
||||||
setCookiesEnabled(true)
|
setCookiesEnabled(true)
|
||||||
|
@ -30,13 +27,16 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener {
|
||||||
addPermittedHostname("telegra.ph")
|
addPermittedHostname("telegra.ph")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if app is opened to show special page
|
if (intent.action == Intent.ACTION_VIEW && !intent.dataString.isNullOrBlank() && intent.dataString.contains("telegra.ph")) {
|
||||||
var urlToLoad = TELEGRAPH
|
Api().getPage(intent.dataString.split("/").last()) { page ->
|
||||||
if (intent.action == Intent.ACTION_VIEW && !intent.dataString.isNullOrBlank() && intent.dataString.contains("telegra.ph"))
|
page?.let {
|
||||||
urlToLoad = intent.dataString
|
val html = "<h1>${it.title}</h1>${it.content}"
|
||||||
|
webView?.loadDataWithBaseURL(it.url, html, "text/html; charset=UTF-8", null, null)
|
||||||
// Load URL
|
}
|
||||||
webView?.loadUrl(urlToLoad)
|
}
|
||||||
|
} else {
|
||||||
|
webView?.loadUrl(TELEGRAPH)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPageFinished(url: String?) {
|
override fun onPageFinished(url: String?) {
|
||||||
|
@ -80,18 +80,6 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener {
|
||||||
else super.onBackPressed()
|
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 {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
super.onCreateOptionsMenu(menu)
|
super.onCreateOptionsMenu(menu)
|
||||||
menuInflater.inflate(R.menu.activity_main, menu)
|
menuInflater.inflate(R.menu.activity_main, menu)
|
||||||
|
@ -120,12 +108,4 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun executeJavaScript(code: String) {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
|
||||||
webView?.evaluateJavascript(code, null)
|
|
||||||
} else {
|
|
||||||
webView?.loadUrl(code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
|
||||||
<item
|
|
||||||
android:id="@+id/format"
|
|
||||||
android:title="@string/format"
|
|
||||||
app:showAsAction="always"/>
|
|
||||||
</menu>
|
|
|
@ -5,5 +5,4 @@
|
||||||
<string name="help_text">
|
<string name="help_text">
|
||||||
<![CDATA[<h3>How to use text formatting?</h3>You can use formatting like <b>bold</b>, <i>italics</i> and so on at least on Lollipop and above by double tapping the text.<h3>The app only shows strange things!</h3>It\'s not verified, that the app will work on devices with KitKat or lower. In Lollipop Google introduced a Chrome based and updatable WebView with more features and fixes. I\'m sorry! But in December \'16 Telegram will publish docs for the Telegraph API, so I\'ll be able to create a native app instead of a wrapper. Be patient!]]>
|
<![CDATA[<h3>How to use text formatting?</h3>You can use formatting like <b>bold</b>, <i>italics</i> and so on at least on Lollipop and above by double tapping the text.<h3>The app only shows strange things!</h3>It\'s not verified, that the app will work on devices with KitKat or lower. In Lollipop Google introduced a Chrome based and updatable WebView with more features and fixes. I\'m sorry! But in December \'16 Telegram will publish docs for the Telegraph API, so I\'ll be able to create a native app instead of a wrapper. Be patient!]]>
|
||||||
</string>
|
</string>
|
||||||
<string name="format">Format</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.0.5-2'
|
ext.kotlin_version = '1.0.5-3'
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.3.0-alpha1'
|
classpath 'com.android.tools.build:gradle:2.3.0-beta1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue