diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/SourcesActivity.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/SourcesActivity.kt index ca47080..b1cab6c 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/SourcesActivity.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/SourcesActivity.kt @@ -5,6 +5,7 @@ import android.content.res.ColorStateList import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager import bou.amine.apps.readerforselfossv2.android.adapters.SourcesListAdapter import bou.amine.apps.readerforselfossv2.android.databinding.ActivitySourcesBinding @@ -36,8 +37,10 @@ class SourcesActivity : AppCompatActivity(), DIAware { supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true) - binding.fab.rippleColor = resources.getColor(R.color.colorAccentDark) - binding.fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorAccent)) + binding.fab.rippleColor = ContextCompat.getColor(this, R.color.colorAccentDark) + + binding.fab.backgroundTintList = + ColorStateList.valueOf(ContextCompat.getColor(this, R.color.colorAccent)) } override fun onStop() { diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt index 11f6f62..e3fcdb2 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt @@ -6,6 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView.ScaleType +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import bou.amine.apps.readerforselfossv2.android.R import bou.amine.apps.readerforselfossv2.android.databinding.CardItemBinding @@ -60,7 +61,7 @@ class ItemCardAdapter( binding.title.setOnTouchListener(LinkOnTouchListener()) - binding.title.setLinkTextColor(c.resources.getColor(R.color.colorAccent)) + binding.title.setLinkTextColor(ContextCompat.getColor(c, R.color.colorAccent)) binding.sourceTitleAndDate.text = itm.sourceAuthorAndDate() diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt index c557b10..0848c5a 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import bou.amine.apps.readerforselfossv2.android.R import bou.amine.apps.readerforselfossv2.android.databinding.ListItemBinding @@ -44,7 +45,8 @@ class ItemListAdapter( binding.title.setOnTouchListener(LinkOnTouchListener()) - binding.title.setLinkTextColor(c.resources.getColor(R.color.colorAccent)) + binding.title.setLinkTextColor(ContextCompat.getColor(c, R.color.colorAccent)) + binding.sourceTitleAndDate.text = itm.sourceAuthorAndDate() diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt index 834f32c..b51a0bd 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/ArticleFragment.kt @@ -10,13 +10,21 @@ import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Bundle import android.util.TypedValue -import android.view.* +import android.view.GestureDetector +import android.view.InflateException +import android.view.LayoutInflater +import android.view.MenuItem +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.webkit.WebResourceRequest import android.webkit.WebResourceResponse import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient import android.widget.Toast import androidx.appcompat.app.AlertDialog +import androidx.core.content.ContextCompat import androidx.core.widget.NestedScrollView import androidx.fragment.app.Fragment import bou.amine.apps.readerforselfossv2.android.ImageActivity @@ -35,6 +43,7 @@ import bou.amine.apps.readerforselfossv2.model.SelfossModel import bou.amine.apps.readerforselfossv2.repository.Repository import bou.amine.apps.readerforselfossv2.rest.MercuryApi import bou.amine.apps.readerforselfossv2.service.AppSettingsService +import bou.amine.apps.readerforselfossv2.utils.ImageMimeType import bou.amine.apps.readerforselfossv2.utils.getHtmlDecoded import bou.amine.apps.readerforselfossv2.utils.getImages import bou.amine.apps.readerforselfossv2.utils.getThumbnail @@ -54,7 +63,7 @@ import org.kodein.di.instance import java.net.MalformedURLException import java.net.SocketTimeoutException import java.net.URL -import java.util.* +import java.util.Locale import java.util.concurrent.ExecutionException @@ -116,9 +125,15 @@ class ArticleFragment : Fragment(), DIAware { fab = binding.fab - fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorAccent)) + fab.backgroundTintList = + ColorStateList.valueOf( + ContextCompat.getColor( + requireContext(), + R.color.colorAccent + ) + ) - fab.rippleColor = resources.getColor(R.color.colorAccentDark) + fab.rippleColor = ContextCompat.getColor(requireContext(), R.color.colorAccentDark) val floatingToolbar: FloatingToolbar = handleFloatingToolbar() @@ -203,7 +218,8 @@ class ArticleFragment : Fragment(), DIAware { } floatingToolbar.attachFab(fab) - floatingToolbar.background = ColorDrawable(resources.getColor(R.color.colorAccent)) + floatingToolbar.background = + ColorDrawable(ContextCompat.getColor(requireContext(), R.color.colorAccent)) floatingToolbar.setClickListener( object : FloatingToolbar.ItemClickListener { @@ -288,7 +304,7 @@ class ArticleFragment : Fragment(), DIAware { contentText = data.content.orEmpty() htmlToWebview() - handleLeadImage(data?.lead_image_url) + handleLeadImage(data.lead_image_url) binding.nestedScrollView.scrollTo(0, 0) binding.progressBar.visibility = View.GONE @@ -382,6 +398,8 @@ class ArticleFragment : Fragment(), DIAware { binding.webcontent.settings.standardFontFamily = a.getString(0) + a.recycle() + binding.webcontent.visibility = View.VISIBLE val colorOnSurface = TypedValue() @@ -457,7 +475,7 @@ class ArticleFragment : Fragment(), DIAware { | color: ${ String.format( "#%06X", - 0xFFFFFF and resources.getColor(R.color.colorAccent) + 0xFFFFFF and ContextCompat.getColor(requireContext(), R.color.colorAccent) ) } !important; | } diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/FilterSheetFragment.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/FilterSheetFragment.kt index d065932..20fc52e 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/FilterSheetFragment.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/fragments/FilterSheetFragment.kt @@ -12,6 +12,7 @@ import android.view.View import android.view.View.GONE import android.view.View.VISIBLE import android.view.ViewGroup +import androidx.core.content.ContextCompat import bou.amine.apps.readerforselfossv2.android.HomeActivity import bou.amine.apps.readerforselfossv2.android.R import bou.amine.apps.readerforselfossv2.android.databinding.FilterFragmentBinding @@ -20,7 +21,7 @@ import bou.amine.apps.readerforselfossv2.repository.Repository import bou.amine.apps.readerforselfossv2.utils.getHtmlDecoded import bou.amine.apps.readerforselfossv2.utils.getIcon import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.ViewTarget +import com.bumptech.glide.request.target.CustomViewTarget import com.bumptech.glide.request.transition.Transition import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.chip.Chip @@ -88,7 +89,7 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware { Glide.with(context) .load(source.getIcon(repository.baseUrl)) - .into(object : ViewTarget(c) { + .into(object : CustomViewTarget(c) { override fun onResourceReady( resource: Drawable, transition: Transition? @@ -100,6 +101,13 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware { } } + override fun onLoadFailed(errorDrawable: Drawable?) { + c.chipIcon = errorDrawable + } + + override fun onResourceCleared(placeholder: Drawable?) { + c.chipIcon = placeholder + } }) c.text = source.title.getHtmlDecoded() @@ -156,7 +164,7 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware { Color.parseColor(tag.color) } catch (e: IllegalArgumentException) { e.sendSilentlyWithAcraWithName("color issue " + tag.color) - resources.getColor(R.color.colorPrimary) + ContextCompat.getColor(context, R.color.colorPrimary) } gd.setColor(gdColor) gd.shape = GradientDrawable.RECTANGLE diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/utils/LinksUtils.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/utils/LinksUtils.kt index b5db28e..1a30a75 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/utils/LinksUtils.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/utils/LinksUtils.kt @@ -95,6 +95,7 @@ class LinkOnTouchListener : View.OnTouchListener { if (link.isNotEmpty()) { if (action == MotionEvent.ACTION_UP) { link[0].onClick(widget) + widget.performClick() } ret = true } diff --git a/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/ModelConverters.kt b/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/ModelConverters.kt index 3999b3d..8f9bf88 100644 --- a/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/ModelConverters.kt +++ b/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/ModelConverters.kt @@ -1,13 +1,19 @@ package bou.amine.apps.readerforselfossv2.utils import android.net.Uri +import android.os.Build import android.text.Html import bou.amine.apps.readerforselfossv2.model.SelfossModel import org.jsoup.Jsoup import java.util.* actual fun String.getHtmlDecoded(): String { - return Html.fromHtml(this).toString() + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + Html.fromHtml(this, Html.FROM_HTML_MODE_COMPACT).toString() + } else { + @Suppress("DEPRECATION") + Html.fromHtml(this).toString() + } } actual fun SelfossModel.Item.getIcon(baseUrl: String): String { diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/EntityUtils.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/EntityUtils.kt index 7c1c1af..2dd741c 100644 --- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/EntityUtils.kt +++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/EntityUtils.kt @@ -17,7 +17,7 @@ fun SOURCE.toView(): SelfossModel.SourceDetail = this.id.toInt(), this.title, null, - this.tags?.split(","), + this.tags.split(","), this.spout, this.error, this.icon,