From 2b82be61d0fbbb46625d89e799a970d409e9c1f6 Mon Sep 17 00:00:00 2001 From: davidoskky Date: Sat, 16 Sep 2023 14:09:29 +0200 Subject: [PATCH] Revert changes not related to the gradle upgrade --- .../android/SourcesActivity.kt | 7 +- .../android/adapters/ItemCardAdapter.kt | 3 +- .../android/adapters/ItemListAdapter.kt | 4 +- .../android/fragments/ArticleFragment.kt | 126 +++++++----------- .../android/fragments/FilterSheetFragment.kt | 14 +- .../android/settings/SettingsActivity.kt | 18 ++- .../android/utils/LinksUtils.kt | 1 - gradle.properties | 2 +- .../utils/ModelConverters.kt | 23 ++-- .../readerforselfossv2/utils/EntityUtils.kt | 2 +- .../apps/readerforselfossv2/utils/Enums.kt | 16 --- 11 files changed, 80 insertions(+), 136 deletions(-) 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 b1cab6c..ca47080 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,7 +5,6 @@ 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 @@ -37,10 +36,8 @@ class SourcesActivity : AppCompatActivity(), DIAware { supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true) - binding.fab.rippleColor = ContextCompat.getColor(this, R.color.colorAccentDark) - - binding.fab.backgroundTintList = - ColorStateList.valueOf(ContextCompat.getColor(this, R.color.colorAccent)) + binding.fab.rippleColor = resources.getColor(R.color.colorAccentDark) + binding.fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(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 e3fcdb2..11f6f62 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,7 +6,6 @@ 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 @@ -61,7 +60,7 @@ class ItemCardAdapter( binding.title.setOnTouchListener(LinkOnTouchListener()) - binding.title.setLinkTextColor(ContextCompat.getColor(c, R.color.colorAccent)) + binding.title.setLinkTextColor(c.resources.getColor(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 0848c5a..c557b10 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,7 +4,6 @@ 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 @@ -45,8 +44,7 @@ class ItemListAdapter( binding.title.setOnTouchListener(LinkOnTouchListener()) - binding.title.setLinkTextColor(ContextCompat.getColor(c, R.color.colorAccent)) - + binding.title.setLinkTextColor(c.resources.getColor(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 5ba8e9d..834f32c 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,21 +10,13 @@ import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Bundle import android.util.TypedValue -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.view.* 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 @@ -43,7 +35,6 @@ 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 @@ -63,7 +54,7 @@ import org.kodein.di.instance import java.net.MalformedURLException import java.net.SocketTimeoutException import java.net.URL -import java.util.Locale +import java.util.* import java.util.concurrent.ExecutionException @@ -125,15 +116,9 @@ class ArticleFragment : Fragment(), DIAware { fab = binding.fab - fab.backgroundTintList = - ColorStateList.valueOf( - ContextCompat.getColor( - requireContext(), - R.color.colorAccent - ) - ) + fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorAccent)) - fab.rippleColor = ContextCompat.getColor(requireContext(), R.color.colorAccentDark) + fab.rippleColor = resources.getColor(R.color.colorAccentDark) val floatingToolbar: FloatingToolbar = handleFloatingToolbar() @@ -218,8 +203,7 @@ class ArticleFragment : Fragment(), DIAware { } floatingToolbar.attachFab(fab) - floatingToolbar.background = - ColorDrawable(ContextCompat.getColor(requireContext(), R.color.colorAccent)) + floatingToolbar.background = ColorDrawable(resources.getColor(R.color.colorAccent)) floatingToolbar.setClickListener( object : FloatingToolbar.ItemClickListener { @@ -304,7 +288,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 @@ -329,19 +313,11 @@ class ArticleFragment : Fragment(), DIAware { private fun handleImageLoading() { binding.webcontent.webViewClient = object : WebViewClient() { - override fun shouldOverrideUrlLoading( - view: WebView?, - request: WebResourceRequest? - ): Boolean { - val url = request?.url?.toString() - return if (context != null && url != null && url.isUrlValid() && binding.webcontent.hitTestResult.type != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { + @Deprecated("Deprecated in Java") + override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean { + return if (context != null && url.isUrlValid() && binding.webcontent.hitTestResult.type != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { try { - requireContext().startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse(url) - ) - ) + requireContext().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) } catch (e: ActivityNotFoundException) { e.sendSilentlyWithAcraWithName("activityNotFound > $url") } @@ -351,42 +327,50 @@ class ArticleFragment : Fragment(), DIAware { } } - override fun shouldInterceptRequest( - view: WebView, - request: WebResourceRequest - ): WebResourceResponse? { - val url = request.url.toString() + @Deprecated("Deprecated in Java") + override fun shouldInterceptRequest(view: WebView, url: String): WebResourceResponse? { val glideOptions = RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.ALL) - - val supportedExtensions = ImageMimeType.values().map { it.extension } - - val matchingExtension = supportedExtensions.find { - url.lowercase(Locale.US).contains(it) - } - - matchingExtension?.let { + if (url.lowercase(Locale.US).contains(".jpg") || url.lowercase(Locale.US) + .contains(".jpeg") + ) { try { - val image = Glide.with(view) - .asBitmap() - .apply(glideOptions) - .load(url) - .submit() - .get() - - val mimeType = ImageMimeType.findMimeTypeByExtension(it) - if (mimeType != null) { - return WebResourceResponse( - mimeType, - "UTF-8", - getBitmapInputStream(image, Bitmap.CompressFormat.WEBP) - ) - } + val image = + Glide.with(view).asBitmap().apply(glideOptions).load(url).submit().get() + return WebResourceResponse( + IMAGE_JPG, + "UTF-8", + getBitmapInputStream(image, Bitmap.CompressFormat.JPEG) + ) + } catch (e: ExecutionException) { + // Do nothing + } + } else if (url.lowercase(Locale.US).contains(".png")) { + try { + val image = + Glide.with(view).asBitmap().apply(glideOptions).load(url).submit().get() + return WebResourceResponse( + IMAGE_JPG, + "UTF-8", + getBitmapInputStream(image, Bitmap.CompressFormat.PNG) + ) + } catch (e: ExecutionException) { + // Do nothing + } + } else if (url.lowercase(Locale.US).contains(".webp")) { + try { + val image = + Glide.with(view).asBitmap().apply(glideOptions).load(url).submit().get() + return WebResourceResponse( + IMAGE_JPG, + "UTF-8", + getBitmapInputStream(image, Bitmap.CompressFormat.WEBP) + ) } catch (e: ExecutionException) { // Do nothing } } - return super.shouldInterceptRequest(view, request) + return super.shouldInterceptRequest(view, url) } } } @@ -398,23 +382,13 @@ class ArticleFragment : Fragment(), DIAware { binding.webcontent.settings.standardFontFamily = a.getString(0) - a.recycle() - binding.webcontent.visibility = View.VISIBLE val colorOnSurface = TypedValue() - requireContext().theme.resolveAttribute( - com.google.android.material.R.attr.colorOnSurface, - colorOnSurface, - true - ) + requireContext().theme.resolveAttribute(R.attr.colorOnSurface, colorOnSurface, true) val colorSurface = TypedValue() - requireContext().theme.resolveAttribute( - com.google.android.material.R.attr.colorSurface, - colorSurface, - true - ) + requireContext().theme.resolveAttribute(R.attr.colorSurface, colorSurface, true) binding.webcontent.settings.useWideViewPort = true binding.webcontent.settings.loadWithOverviewMode = true @@ -483,7 +457,7 @@ class ArticleFragment : Fragment(), DIAware { | color: ${ String.format( "#%06X", - 0xFFFFFF and ContextCompat.getColor(requireContext(), R.color.colorAccent) + 0xFFFFFF and resources.getColor(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 20fc52e..d065932 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,7 +12,6 @@ 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 @@ -21,7 +20,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.CustomViewTarget +import com.bumptech.glide.request.target.ViewTarget import com.bumptech.glide.request.transition.Transition import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.chip.Chip @@ -89,7 +88,7 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware { Glide.with(context) .load(source.getIcon(repository.baseUrl)) - .into(object : CustomViewTarget(c) { + .into(object : ViewTarget(c) { override fun onResourceReady( resource: Drawable, transition: Transition? @@ -101,13 +100,6 @@ 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() @@ -164,7 +156,7 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware { Color.parseColor(tag.color) } catch (e: IllegalArgumentException) { e.sendSilentlyWithAcraWithName("color issue " + tag.color) - ContextCompat.getColor(context, R.color.colorPrimary) + resources.getColor(R.color.colorPrimary) } gd.setColor(gdColor) gd.shape = GradientDrawable.RECTANGLE diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/settings/SettingsActivity.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/settings/SettingsActivity.kt index 8dd817b..8d79b83 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/settings/SettingsActivity.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/settings/SettingsActivity.kt @@ -71,25 +71,23 @@ class SettingsActivity : AppCompatActivity(), } override fun onPreferenceStartFragment( - caller: PreferenceFragmentCompat, - pref: Preference + caller: PreferenceFragmentCompat, + pref: Preference ): Boolean { - val fragmentClassName = pref.fragment ?: return false - // Instantiate the new Fragment val args = pref.extras val fragment = supportFragmentManager.fragmentFactory.instantiate( - classLoader, - fragmentClassName + classLoader, + pref.fragment.toString() ).apply { arguments = args + setTargetFragment(caller, 0) } - // Replace the existing Fragment with the new Fragment supportFragmentManager.beginTransaction() - .replace(R.id.settings, fragment) - .addToBackStack(null) - .commit() + .replace(R.id.settings, fragment) + .addToBackStack(null) + .commit() title = pref.title supportActionBar?.title = title return true 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 1a30a75..b5db28e 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,7 +95,6 @@ class LinkOnTouchListener : View.OnTouchListener { if (link.isNotEmpty()) { if (action == MotionEvent.ACTION_UP) { link[0].onClick(widget) - widget.performClick() } ret = true } diff --git a/gradle.properties b/gradle.properties index 27133c4..4bc8df2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ kotlin.code.style=official android.useAndroidX=true #android.nonTransitiveRClass=true android.enableJetifier=true -android.nonTransitiveRClass=true +android.nonTransitiveRClass=false #MPP kotlin.mpp.enableCInteropCommonization=true org.gradle.parallel=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 56f27e7..3999b3d 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,19 +1,13 @@ 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 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() - } + return Html.fromHtml(this).toString() } actual fun SelfossModel.Item.getIcon(baseUrl: String): String { @@ -25,10 +19,19 @@ actual fun SelfossModel.Item.getThumbnail(baseUrl: String): String { } actual fun SelfossModel.Item.getImages(): ArrayList { - val doc = Jsoup.parse(content) - val images = doc.getElementsByTag("img") + val allImages = ArrayList() - return ArrayList(images.map { it.attr("src") }) + for ( image in Jsoup.parse(content).getElementsByTag("img")) { + val url = image.attr("src") + if (url.lowercase(Locale.US).contains(".jpg") || + url.lowercase(Locale.US).contains(".jpeg") || + url.lowercase(Locale.US).contains(".png") || + url.lowercase(Locale.US).contains(".webp")) + { + allImages.add(url) + } + } + return allImages } actual fun SelfossModel.Source.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 2dd741c..7c1c1af 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, diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/Enums.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/Enums.kt index 77e7c59..fd610d2 100644 --- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/Enums.kt +++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/utils/Enums.kt @@ -8,20 +8,4 @@ enum class ItemType(val position: Int, val type: String) { companion object { fun fromInt(value: Int) = values().first { it.position == value } } -} - -enum class ImageMimeType(val extension: String, val mimeType: String) { - JPG(".jpg", "image/jpeg"), - JPEG(".jpeg", "image/jpeg"), - PNG(".png", "image/png"), - WEBP(".webp", "image/webp"), - GIF(".gif", "image/gif"), - SVG(".svg", "image/svg+xml"), - BMP(".bmp", "image/bmp"), - TIFF(".tiff", "image/tiff"), - TIF(".tif", "image/tiff"); - - companion object { - fun findMimeTypeByExtension(ext: String) = values().find { it.extension == ext }?.mimeType - } } \ No newline at end of file