Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package io.github.bugaevc.phread
- import android.content.Context
- import android.os.Bundle
- import android.support.v4.app.LoaderManager
- import android.support.v4.app.ShareCompat
- import android.support.v4.content.AsyncTaskLoader
- import android.support.v4.content.Loader
- import android.support.v7.app.AppCompatActivity
- import kotlinx.android.synthetic.main.activity_post.*
- import kotlinx.android.synthetic.main.content_post.*
- import org.jsoup.Jsoup
- import java.net.URL
- import okhttp3.OkHttpClient
- import okhttp3.Request
- class PostActivity : AppCompatActivity(), LoaderManager.LoaderCallbacks<PostActivity.PostData> {
- companion object {
- val POST_LOADER_ID: Int = 0
- }
- data class PostData(var title: String, val htmlText: String)
- private lateinit var url: String
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_post)
- setSupportActionBar(toolbar)
- url = intent.dataString
- fab.setOnClickListener {
- ShareCompat.IntentBuilder
- .from(this)
- .setText(url)
- .setType("text/plain")
- .startChooser()
- }
- supportActionBar!!.setDisplayHomeAsUpEnabled(true)
- supportLoaderManager.initLoader(POST_LOADER_ID, null, this).forceLoad()
- }
- override fun onCreateLoader(id: Int, args: Bundle?) = PostLoader(this, URL(url))
- override fun onLoadFinished(loader: Loader<PostData>, result: PostData?) {
- if (result == null) {
- return
- }
- webView.loadDataWithBaseURL(url, result.htmlText, "text/html", null, null)
- toolbar_layout.title = result.title
- }
- override fun onLoaderReset(loader: Loader<PostData>?) {
- TODO("not implemented")
- }
- class PostLoader(context: Context, val url: URL) : AsyncTaskLoader<PostData>(context) {
- override fun loadInBackground(): PostData? {
- try {
- // fetch the post from the network
- val client = OkHttpClient()
- val request = Request.Builder().url(url).build()
- val response = client.newCall(request).execute()
- val content = response.body().string()
- // parse it
- val doc = Jsoup.parse(content.replace("<br>", "\n"), url.toString())
- return PostData(
- title = doc.select("header").text(),
- htmlText = doc.select("div.content").html()
- )
- } catch (e: Exception) {
- e.printStackTrace()
- return null
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement