Trying to fix issues with Glide, fragment, and destroyed activity.
This commit is contained in:
parent
46d6bd57c1
commit
8dc25c527d
@ -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(
|
||||||
|
Loading…
Reference in New Issue
Block a user