Trying to fix issues with Glide, fragment, and destroyed activity.

This commit is contained in:
Amine Bou 2018-05-31 22:41:23 +02:00
parent 46d6bd57c1
commit 8dc25c527d

View File

@ -1,6 +1,5 @@
package apps.amine.bou.readerforselfoss.fragments package apps.amine.bou.readerforselfoss.fragments
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.res.ColorStateList import android.content.res.ColorStateList
@ -20,7 +19,6 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.webkit.WebSettings import android.webkit.WebSettings
import apps.amine.bou.readerforselfoss.BuildConfig
import apps.amine.bou.readerforselfoss.R import apps.amine.bou.readerforselfoss.R
import apps.amine.bou.readerforselfoss.api.mercury.MercuryApi import apps.amine.bou.readerforselfoss.api.mercury.MercuryApi
import apps.amine.bou.readerforselfoss.api.mercury.ParsedContent import apps.amine.bou.readerforselfoss.api.mercury.ParsedContent
@ -86,8 +84,6 @@ class ArticleFragment : Fragment() {
rootView = inflater rootView = inflater
.inflate(R.layout.fragment_article, container, false) as ViewGroup .inflate(R.layout.fragment_article, container, false) as ViewGroup
val context: Context = activity!!
url = allItems[pageNumber.toInt()].getLinkDecoded() url = allItems[pageNumber.toInt()].getLinkDecoded()
contentText = allItems[pageNumber.toInt()].content contentText = allItems[pageNumber.toInt()].content
contentTitle = allItems[pageNumber.toInt()].title contentTitle = allItems[pageNumber.toInt()].title
@ -119,7 +115,7 @@ class ArticleFragment : Fragment() {
object : FloatingToolbar.ItemClickListener { object : FloatingToolbar.ItemClickListener {
override fun onItemClick(item: MenuItem) { override fun onItemClick(item: MenuItem) {
when (item.itemId) { when (item.itemId) {
R.id.more_action -> getContentFromMercury(customTabsIntent, prefs, context) R.id.more_action -> getContentFromMercury(customTabsIntent, prefs)
R.id.share_action -> activity!!.shareLink(url) R.id.share_action -> activity!!.shareLink(url)
R.id.open_action -> activity!!.openItemUrl( R.id.open_action -> activity!!.openItemUrl(
allItems, allItems,
@ -142,16 +138,16 @@ class ArticleFragment : Fragment() {
rootView.source.text = contentSource rootView.source.text = contentSource
if (contentText.isEmptyOrNullOrNullString()) { if (contentText.isEmptyOrNullOrNullString()) {
getContentFromMercury(customTabsIntent, prefs, context) getContentFromMercury(customTabsIntent, prefs)
} else { } else {
rootView.titleView.text = contentTitle rootView.titleView.text = contentTitle
htmlToWebview(contentText, prefs, context) htmlToWebview(contentText, prefs)
if (!contentImage.isEmptyOrNullOrNullString()) { if (!contentImage.isEmptyOrNullOrNullString() && context != null) {
rootView.imageView.visibility = View.VISIBLE rootView.imageView.visibility = View.VISIBLE
Glide Glide
.with(context) .with(context!!)
.asBitmap() .asBitmap()
.load(contentImage) .load(contentImage)
.apply(RequestOptions.fitCenterTransform()) .apply(RequestOptions.fitCenterTransform())
@ -176,8 +172,7 @@ class ArticleFragment : Fragment() {
private fun getContentFromMercury( private fun getContentFromMercury(
customTabsIntent: CustomTabsIntent, customTabsIntent: CustomTabsIntent,
prefs: SharedPreferences, prefs: SharedPreferences
context: Context
) { ) {
rootView.progressBar.visibility = View.VISIBLE rootView.progressBar.visibility = View.VISIBLE
val parser = MercuryApi( val parser = MercuryApi(
@ -197,33 +192,39 @@ class ArticleFragment : Fragment() {
rootView.titleView.text = response.body()!!.title rootView.titleView.text = response.body()!!.title
url = response.body()!!.url url = response.body()!!.url
} catch (e: Exception) { } catch (e: Exception) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context) if (context != null) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
}
} }
try { try {
htmlToWebview(response.body()!!.content.orEmpty(), prefs, context) htmlToWebview(response.body()!!.content.orEmpty(), prefs)
} catch (e: Exception) { } catch (e: Exception) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context) if (context != null) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
}
} }
try { try {
if (response.body()!!.lead_image_url != null && !response.body()!!.lead_image_url.isNullOrEmpty()) { if (response.body()!!.lead_image_url != null && !response.body()!!.lead_image_url.isNullOrEmpty() && context != null) {
rootView.imageView.visibility = View.VISIBLE rootView.imageView.visibility = View.VISIBLE
try { try {
Glide Glide
.with(context) .with(context!!)
.asBitmap() .asBitmap()
.load(response.body()!!.lead_image_url) .load(response.body()!!.lead_image_url)
.apply(RequestOptions.fitCenterTransform()) .apply(RequestOptions.fitCenterTransform())
.into(rootView.imageView) .into(rootView.imageView)
} catch (e: Exception) { } catch (e: Exception) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context) ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
} }
} else { } else {
rootView.imageView.visibility = View.GONE rootView.imageView.visibility = View.GONE
} }
} catch (e: Exception) { } catch (e: Exception) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context) if (context != null) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
}
} }
try { try {
@ -231,17 +232,23 @@ class ArticleFragment : Fragment() {
rootView.progressBar.visibility = View.GONE rootView.progressBar.visibility = View.GONE
} catch (e: Exception) { } catch (e: Exception) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context) if (context != null) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
}
} }
} else { } else {
try { try {
openInBrowserAfterFailing(customTabsIntent) openInBrowserAfterFailing(customTabsIntent)
} catch (e: Exception) { } catch (e: Exception) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context) if (context != null) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
}
} }
} }
} catch (e: Exception) { } catch (e: Exception) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context) if (context != null) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
}
} }
} }
@ -253,31 +260,47 @@ class ArticleFragment : Fragment() {
) )
} }
private fun htmlToWebview(c: String, prefs: SharedPreferences, context: Context) { private fun htmlToWebview(c: String, prefs: SharedPreferences) {
val stringColor = String.format("#%06X", 0xFFFFFF and appColors.colorAccent) val stringColor = String.format("#%06X", 0xFFFFFF and appColors.colorAccent)
rootView.webcontent.visibility = View.VISIBLE rootView.webcontent.visibility = View.VISIBLE
val (textColor, backgroundColor) = if (appColors.isDarkTheme) { val (textColor, backgroundColor) = if (appColors.isDarkTheme) {
if (context != null) {
rootView.webcontent.setBackgroundColor( rootView.webcontent.setBackgroundColor(
ContextCompat.getColor( ContextCompat.getColor(
context, context!!,
R.color.dark_webview R.color.dark_webview
) )
) )
Pair(ContextCompat.getColor(context, R.color.dark_webview_text), ContextCompat.getColor(context, R.color.light_webview_text)) Pair(ContextCompat.getColor(context!!, R.color.dark_webview_text), ContextCompat.getColor(context!!, R.color.light_webview_text))
} else { } else {
Pair(null, null)
}
} else {
if (context != null) {
rootView.webcontent.setBackgroundColor( rootView.webcontent.setBackgroundColor(
ContextCompat.getColor( ContextCompat.getColor(
context, context!!,
R.color.light_webview R.color.light_webview
) )
) )
Pair(ContextCompat.getColor(context, R.color.light_webview_text), ContextCompat.getColor(context, R.color.dark_webview_text)) Pair(ContextCompat.getColor(context!!, R.color.light_webview_text), ContextCompat.getColor(context!!, R.color.dark_webview_text))
} else {
Pair(null, null)
}
} }
val stringTextColor = String.format("#%06X", 0xFFFFFF and textColor) val stringTextColor: String = if (textColor != null) {
val stringBackgroundColor = String.format("#%06X", 0xFFFFFF and backgroundColor) String.format("#%06X", 0xFFFFFF and textColor)
} else {
"#000000"
}
val stringBackgroundColor = if (backgroundColor != null) {
String.format("#%06X", 0xFFFFFF and backgroundColor)
} else {
"#FFFFFF"
}
rootView.webcontent.settings.useWideViewPort = true rootView.webcontent.settings.useWideViewPort = true
rootView.webcontent.settings.loadWithOverviewMode = true rootView.webcontent.settings.loadWithOverviewMode = true
@ -296,8 +319,8 @@ class ArticleFragment : Fragment() {
val itemUrl = URL(url) val itemUrl = URL(url)
baseUrl = itemUrl.protocol + "://" + itemUrl.host baseUrl = itemUrl.protocol + "://" + itemUrl.host
} catch (e: MalformedURLException) { } catch (e: MalformedURLException) {
if (showMalformedUrl) { if (showMalformedUrl && context != null) {
val alertDialog = AlertDialog.Builder(context).create() val alertDialog = AlertDialog.Builder(context!!).create()
alertDialog.setTitle("Error") alertDialog.setTitle("Error")
alertDialog.setMessage("You are encountering a bug that I can't solve. Can you please contact me to solve the issue, please ?") alertDialog.setMessage("You are encountering a bug that I can't solve. Can you please contact me to solve the issue, please ?")
alertDialog.setButton( alertDialog.setButton(