NewsFragment.kt 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package fr.riff_app.riff.ui.news
  2. import android.os.Build
  3. import android.os.Bundle
  4. import android.util.Log
  5. import android.view.LayoutInflater
  6. import android.view.View
  7. import android.view.ViewGroup
  8. import android.webkit.WebView
  9. import androidx.fragment.app.Fragment
  10. import androidx.lifecycle.ViewModelProviders
  11. import androidx.recyclerview.widget.LinearLayoutManager
  12. import androidx.recyclerview.widget.RecyclerView
  13. import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
  14. import fr.riff_app.riff.R
  15. class NewsFragment : Fragment() {
  16. private lateinit var newsViewModel: NewsViewModel
  17. private lateinit var recyclerView: RecyclerView
  18. private lateinit var viewAdapter: RecyclerView.Adapter<*>
  19. private lateinit var viewManager: RecyclerView.LayoutManager
  20. override fun onCreateView(
  21. inflater: LayoutInflater,
  22. container: ViewGroup?,
  23. savedInstanceState: Bundle?
  24. ): View? {
  25. if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT)
  26. {
  27. newsViewModel =
  28. ViewModelProviders.of(this).get(NewsViewModel::class.java)
  29. if (!newsViewModel.isWebViewLoaded)
  30. {
  31. try {
  32. newsViewModel.root = inflater.inflate(R.layout.fragment_news, container, false)
  33. newsViewModel.webView = newsViewModel.root.findViewById(R.id.news_webview)
  34. newsViewModel.webViewNews = WebViewNews(newsViewModel.webView as WebView)
  35. newsViewModel.webViewNews!!.start(getString(R.string.website_url))
  36. } catch (e: Exception) {
  37. newsViewModel.root = inflater.inflate(R.layout.fragment_error_webview, container, false)
  38. }
  39. newsViewModel.isWebViewLoaded = true
  40. //[REMOVE LOG CALLS]Log.d(tag, "webview created")
  41. } else {
  42. //[REMOVE LOG CALLS]Log.d(tag, "webview already created!?")
  43. }
  44. newsViewModel.root.addOnLayoutChangeListener(orientationLayoutListener)
  45. return newsViewModel.root
  46. }
  47. newsViewModel =
  48. ViewModelProviders.of(this).get(NewsViewModel::class.java)
  49. newsViewModel.root = inflater.inflate(R.layout.fragment_news, container, false) as SwipeRefreshLayout
  50. viewManager = LinearLayoutManager(context)
  51. viewAdapter = NewsAdapter(newsViewModel.newsArray, context!!, newsViewModel)
  52. recyclerView = newsViewModel.root.findViewById<RecyclerView>(R.id.news_recycler).apply {
  53. // use this setting to improve performance if you know that changes
  54. // in content do not change the layout size of the RecyclerView
  55. setHasFixedSize(true)
  56. // use a linear layout manager
  57. layoutManager = viewManager
  58. // specify an viewAdapter (see also next example)
  59. adapter = viewAdapter
  60. }
  61. (newsViewModel.root as SwipeRefreshLayout).setOnRefreshListener {
  62. newsViewModel.fetch((newsViewModel.root as SwipeRefreshLayout), viewAdapter, context!!)
  63. }
  64. newsViewModel.root.addOnLayoutChangeListener(orientationLayoutListener)
  65. return newsViewModel.root
  66. }
  67. private val orientationLayoutListener : View.OnLayoutChangeListener = View.OnLayoutChangeListener { _: View, _: Int, _: Int, _: Int, _: Int, _: Int, _: Int, _: Int, _: Int ->
  68. val viewHeight = (newsViewModel.root.rootView?.height ?: 1)
  69. val viewWidth = (newsViewModel.root.rootView?.width ?: 1)
  70. val newRatio = if (viewWidth > 0)
  71. (viewHeight*100)/viewWidth
  72. else
  73. 100
  74. if (newsViewModel.screenRatio != newRatio) {
  75. if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
  76. newsViewModel.fetch((newsViewModel.root as SwipeRefreshLayout), viewAdapter, context!!)
  77. newsViewModel.screenRatio = newRatio
  78. }
  79. }
  80. override fun onCreate(savedInstanceState: Bundle?) {
  81. newsViewModel =
  82. ViewModelProviders.of(this).get(NewsViewModel::class.java)
  83. newsViewModel.fetch(c = context!!, isPreloading = true)
  84. //[REMOVE LOG CALLS]Log.d(tag, "news fetched onCreate")
  85. super.onCreate(savedInstanceState)
  86. }
  87. }