Advertisement
bugaevc

PostActivity.kt

May 25th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.71 KB | None | 0 0
  1. package io.github.bugaevc.phread
  2.  
  3. import android.content.Context
  4. import android.os.Bundle
  5. import android.support.v4.app.LoaderManager
  6. import android.support.v4.app.ShareCompat
  7. import android.support.v4.content.AsyncTaskLoader
  8. import android.support.v4.content.Loader
  9. import android.support.v7.app.AppCompatActivity
  10.  
  11. import kotlinx.android.synthetic.main.activity_post.*
  12. import kotlinx.android.synthetic.main.content_post.*
  13.  
  14. import org.jsoup.Jsoup
  15.  
  16. import java.net.URL
  17.  
  18. import okhttp3.OkHttpClient
  19. import okhttp3.Request
  20.  
  21. class PostActivity : AppCompatActivity(), LoaderManager.LoaderCallbacks<PostActivity.PostData> {
  22.  
  23.     companion object {
  24.         val POST_LOADER_ID: Int = 0
  25.     }
  26.  
  27.     data class PostData(var title: String, val htmlText: String)
  28.  
  29.     private lateinit var url: String
  30.  
  31.     override fun onCreate(savedInstanceState: Bundle?) {
  32.         super.onCreate(savedInstanceState)
  33.         setContentView(R.layout.activity_post)
  34.         setSupportActionBar(toolbar)
  35.  
  36.         url = intent.dataString
  37.  
  38.         fab.setOnClickListener {
  39.             ShareCompat.IntentBuilder
  40.                 .from(this)
  41.                 .setText(url)
  42.                 .setType("text/plain")
  43.                 .startChooser()
  44.         }
  45.         supportActionBar!!.setDisplayHomeAsUpEnabled(true)
  46.  
  47.         supportLoaderManager.initLoader(POST_LOADER_ID, null, this).forceLoad()
  48.     }
  49.  
  50.     override fun onCreateLoader(id: Int, args: Bundle?) = PostLoader(this, URL(url))
  51.  
  52.     override fun onLoadFinished(loader: Loader<PostData>, result: PostData?) {
  53.         if (result == null) {
  54.             return
  55.         }
  56.         webView.loadDataWithBaseURL(url, result.htmlText, "text/html", null, null)
  57.         toolbar_layout.title = result.title
  58.     }
  59.  
  60.     override fun onLoaderReset(loader: Loader<PostData>?) {
  61.         TODO("not implemented")
  62.     }
  63.  
  64.     class PostLoader(context: Context, val url: URL) : AsyncTaskLoader<PostData>(context) {
  65.         override fun loadInBackground(): PostData? {
  66.             try {
  67.                 // fetch the post from the network
  68.                 val client = OkHttpClient()
  69.                 val request = Request.Builder().url(url).build()
  70.                 val response = client.newCall(request).execute()
  71.                 val content = response.body().string()
  72.                 // parse it
  73.                 val doc = Jsoup.parse(content.replace("<br>", "\n"), url.toString())
  74.                 return PostData(
  75.                         title = doc.select("header").text(),
  76.                         htmlText = doc.select("div.content").html()
  77.                 )
  78.             } catch (e: Exception) {
  79.                 e.printStackTrace()
  80.                 return null
  81.             }
  82.         }
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement