Compare commits
	
		
			16 Commits
		
	
	
		
			v123010301
			...
			v123020572
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c2a1c9eaac | ||
| 
						 | 
					bf37209a15 | ||
| 
						 | 
					2c558fe6fd | ||
| 
						 | 
					ad88011454 | ||
| 
						 | 
					559c17bc1d | ||
| 
						 | 
					ab9c46f0eb | ||
| 
						 | 
					aa799d2ca8 | ||
| 
						 | 
					177c978474 | ||
| 
						 | 
					39b9991413 | ||
| 
						 | 
					b303f110f1 | ||
| 
						 | 
					f851941a6a | ||
| 
						 | 
					a313552976 | ||
| 
						 | 
					6ac97ed3fe | ||
| 
						 | 
					d583b937b7 | ||
| 
						 | 
					15b9a2d935 | ||
| 
						 | 
					5a8ce15961 | 
@@ -48,13 +48,14 @@ steps:
 | 
			
		||||
    commands:
 | 
			
		||||
      - apt-get update && apt-get install -y git
 | 
			
		||||
      - git fetch --tags -p
 | 
			
		||||
      - PREV=$(git describe --tags --abbrev=0)
 | 
			
		||||
      - ./build.sh --publish --from-ci
 | 
			
		||||
      - git remote add pushing https://$GITEA_USR:$GITEA_PASS@gitea.amine-louveau.fr/Louvorg/ReaderForSelfoss-multiplatform.git
 | 
			
		||||
      - VER=$(git describe --tags --abbrev=0)
 | 
			
		||||
      - CHANGELOG=$(git log $VER..HEAD --pretty="- %s")
 | 
			
		||||
      - CHANGELOG=$(git log $PREV..HEAD --pretty="- %s")
 | 
			
		||||
      - echo "**$VER**\n\n$CHANGELOG\n\n--------------------------------------------------------------------\n\n$(cat CHANGELOG.md)" > CHANGELOG.md
 | 
			
		||||
      - git add CHANGELOG.md
 | 
			
		||||
      - git commit -m "Changelog for $VER [CI SKIP]"
 | 
			
		||||
      - ./build.sh --publish --from-ci
 | 
			
		||||
      - git remote add pushing https://$GITEA_USR:$GITEA_PASS@gitea.amine-louveau.fr/Louvorg/ReaderForSelfoss-multiplatform.git
 | 
			
		||||
      - git push pushing master
 | 
			
		||||
      - git push pushing --tags
 | 
			
		||||
    environment:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,3 +1,30 @@
 | 
			
		||||
**v123020571**
 | 
			
		||||
 | 
			
		||||
- chore: remove errors logging.
 | 
			
		||||
- fix: quickfix for url param not provided for some sources.
 | 
			
		||||
- Update 'CHANGELOG.md'
 | 
			
		||||
- Changelog for v123020523 [CI SKIP]
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
**v123020523**
 | 
			
		||||
 | 
			
		||||
- fix: Git changelog.
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
**v123020491**
 | 
			
		||||
 | 
			
		||||
- fix: Fixed acra bug reporting.
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
**v123010301**
 | 
			
		||||
 | 
			
		||||
- Chore: acra config.
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
**v123010281**
 | 
			
		||||
 | 
			
		||||
- improvement: Improve right to left support (#130) Co-authored-by: davidoskky <davidoskky@hidden.hidden> Co-committed-by: davidoskky <davidoskky@hidden.hidden>
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ import org.kodein.di.*
 | 
			
		||||
class MyApp : MultiDexApplication(), DIAware {
 | 
			
		||||
 | 
			
		||||
    override val di by DI.lazy {
 | 
			
		||||
        bind<AppSettingsService>() with singleton { AppSettingsService(ACRA.isACRASenderServiceProcess()) }
 | 
			
		||||
        import(networkModule)
 | 
			
		||||
        bind<DriverFactory>() with singleton { DriverFactory(applicationContext) }
 | 
			
		||||
        bind<ReaderForSelfossDB>() with singleton { ReaderForSelfossDB(driverFactory.createDriver()) }
 | 
			
		||||
@@ -130,8 +131,8 @@ class MyApp : MultiDexApplication(), DIAware {
 | 
			
		||||
            httpSender {
 | 
			
		||||
                uri =
 | 
			
		||||
                    "https://bugs.amine-louveau.fr/report" /*best guess, you may need to adjust this*/
 | 
			
		||||
                basicAuthLogin = "LMTlLZuazADohTCm"
 | 
			
		||||
                basicAuthPassword = "he6ghHp83F0PYPfh"
 | 
			
		||||
                basicAuthLogin = "qMEscjj89Gwt6cPR"
 | 
			
		||||
                basicAuthPassword = "Yo58QFlGzFaWlBzP"
 | 
			
		||||
                httpMethod = HttpSender.Method.POST
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package bou.amine.apps.readerforselfossv2.android.fragments
 | 
			
		||||
 | 
			
		||||
import android.content.ActivityNotFoundException
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.content.res.ColorStateList
 | 
			
		||||
import android.content.res.TypedArray
 | 
			
		||||
@@ -150,17 +151,19 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
 | 
			
		||||
        } catch (e: InflateException) {
 | 
			
		||||
            e.sendSilentlyWithAcraWithName("webview not available")
 | 
			
		||||
            AlertDialog.Builder(requireContext())
 | 
			
		||||
                .setMessage(requireContext().getString(R.string.webview_dialog_issue_message))
 | 
			
		||||
                .setTitle(requireContext().getString(R.string.webview_dialog_issue_title))
 | 
			
		||||
                .setPositiveButton(
 | 
			
		||||
                    android.R.string.ok
 | 
			
		||||
                ) { _, _ ->
 | 
			
		||||
                    appSettingsService.disableArticleViewer()
 | 
			
		||||
                    requireActivity().finish()
 | 
			
		||||
                }
 | 
			
		||||
                .create()
 | 
			
		||||
                .show()
 | 
			
		||||
            if (context != null) {
 | 
			
		||||
                AlertDialog.Builder(requireContext())
 | 
			
		||||
                    .setMessage(requireContext().getString(R.string.webview_dialog_issue_message))
 | 
			
		||||
                    .setTitle(requireContext().getString(R.string.webview_dialog_issue_title))
 | 
			
		||||
                    .setPositiveButton(
 | 
			
		||||
                        android.R.string.ok
 | 
			
		||||
                    ) { _, _ ->
 | 
			
		||||
                        appSettingsService.disableArticleViewer()
 | 
			
		||||
                        requireActivity().finish()
 | 
			
		||||
                    }
 | 
			
		||||
                    .create()
 | 
			
		||||
                    .show()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return binding.root
 | 
			
		||||
@@ -304,10 +307,16 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
        binding.webcontent.webViewClient = object : WebViewClient() {
 | 
			
		||||
            @Deprecated("Deprecated in Java")
 | 
			
		||||
            override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean {
 | 
			
		||||
                if (binding.webcontent.hitTestResult.type != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
 | 
			
		||||
                    requireContext().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
 | 
			
		||||
                return if (context != null && binding.webcontent.hitTestResult.type != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
 | 
			
		||||
                    try {
 | 
			
		||||
                        requireContext().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
 | 
			
		||||
                    } catch (e: ActivityNotFoundException) {
 | 
			
		||||
                        e.sendSilentlyWithAcraWithName("activityNotFound > $url")
 | 
			
		||||
                    }
 | 
			
		||||
                    true
 | 
			
		||||
                } else {
 | 
			
		||||
                    false
 | 
			
		||||
                }
 | 
			
		||||
                return true
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Deprecated("Deprecated in Java")
 | 
			
		||||
@@ -325,7 +334,7 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
                            getBitmapInputStream(image, Bitmap.CompressFormat.JPEG)
 | 
			
		||||
                        )
 | 
			
		||||
                    } catch (e: ExecutionException) {
 | 
			
		||||
                        e.sendSilentlyWithAcraWithName("shouldInterceptRequest > jpeg > $url")
 | 
			
		||||
                        // Do nothing
 | 
			
		||||
                    }
 | 
			
		||||
                } else if (url.lowercase(Locale.US).contains(".png")) {
 | 
			
		||||
                    try {
 | 
			
		||||
@@ -337,7 +346,7 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
                            getBitmapInputStream(image, Bitmap.CompressFormat.PNG)
 | 
			
		||||
                        )
 | 
			
		||||
                    } catch (e: ExecutionException) {
 | 
			
		||||
                        e.sendSilentlyWithAcraWithName("shouldInterceptRequest > png > $url")
 | 
			
		||||
                        // Do nothing
 | 
			
		||||
                    }
 | 
			
		||||
                } else if (url.lowercase(Locale.US).contains(".webp")) {
 | 
			
		||||
                    try {
 | 
			
		||||
@@ -349,7 +358,7 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
                            getBitmapInputStream(image, Bitmap.CompressFormat.WEBP)
 | 
			
		||||
                        )
 | 
			
		||||
                    } catch (e: ExecutionException) {
 | 
			
		||||
                        e.sendSilentlyWithAcraWithName("shouldInterceptRequest > webp > $url")
 | 
			
		||||
                        // Do nothing
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@@ -359,74 +368,74 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun htmlToWebview() {
 | 
			
		||||
 | 
			
		||||
        val attrs: IntArray = intArrayOf(android.R.attr.fontFamily)
 | 
			
		||||
        val a: TypedArray = requireContext().obtainStyledAttributes(resId, attrs)
 | 
			
		||||
        if (context != null) {
 | 
			
		||||
            val attrs: IntArray = intArrayOf(android.R.attr.fontFamily)
 | 
			
		||||
            val a: TypedArray = requireContext().obtainStyledAttributes(resId, attrs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        binding.webcontent.settings.standardFontFamily = a.getString(0)
 | 
			
		||||
        binding.webcontent.visibility = View.VISIBLE
 | 
			
		||||
            binding.webcontent.settings.standardFontFamily = a.getString(0)
 | 
			
		||||
            binding.webcontent.visibility = View.VISIBLE
 | 
			
		||||
 | 
			
		||||
        val colorOnSurface = TypedValue()
 | 
			
		||||
        requireContext().theme.resolveAttribute(R.attr.colorOnSurface, colorOnSurface, true)
 | 
			
		||||
            val colorOnSurface = TypedValue()
 | 
			
		||||
            requireContext().theme.resolveAttribute(R.attr.colorOnSurface, colorOnSurface, true)
 | 
			
		||||
 | 
			
		||||
        val colorSurface = TypedValue()
 | 
			
		||||
        requireContext().theme.resolveAttribute(R.attr.colorSurface, colorSurface, true)
 | 
			
		||||
            val colorSurface = TypedValue()
 | 
			
		||||
            requireContext().theme.resolveAttribute(R.attr.colorSurface, colorSurface, true)
 | 
			
		||||
 | 
			
		||||
        binding.webcontent.settings.useWideViewPort = true
 | 
			
		||||
        binding.webcontent.settings.loadWithOverviewMode = true
 | 
			
		||||
        binding.webcontent.settings.javaScriptEnabled = false
 | 
			
		||||
            binding.webcontent.settings.useWideViewPort = true
 | 
			
		||||
            binding.webcontent.settings.loadWithOverviewMode = true
 | 
			
		||||
            binding.webcontent.settings.javaScriptEnabled = false
 | 
			
		||||
 | 
			
		||||
        handleImageLoading()
 | 
			
		||||
            handleImageLoading()
 | 
			
		||||
 | 
			
		||||
        val gestureDetector =
 | 
			
		||||
            GestureDetector(activity, object : GestureDetector.SimpleOnGestureListener() {
 | 
			
		||||
                override fun onSingleTapUp(e: MotionEvent): Boolean {
 | 
			
		||||
                    return performClick()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
            val gestureDetector =
 | 
			
		||||
                GestureDetector(activity, object : GestureDetector.SimpleOnGestureListener() {
 | 
			
		||||
                    override fun onSingleTapUp(e: MotionEvent): Boolean {
 | 
			
		||||
                        return performClick()
 | 
			
		||||
                    }
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
        binding.webcontent.setOnTouchListener { _, event -> gestureDetector.onTouchEvent(event) }
 | 
			
		||||
            binding.webcontent.setOnTouchListener { _, event -> gestureDetector.onTouchEvent(event) }
 | 
			
		||||
 | 
			
		||||
        binding.webcontent.settings.layoutAlgorithm =
 | 
			
		||||
            WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
 | 
			
		||||
            binding.webcontent.settings.layoutAlgorithm =
 | 
			
		||||
                WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
 | 
			
		||||
 | 
			
		||||
        var baseUrl: String? = null
 | 
			
		||||
            var baseUrl: String? = null
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            val itemUrl = URL(url)
 | 
			
		||||
            baseUrl = itemUrl.protocol + "://" + itemUrl.host
 | 
			
		||||
        } catch (e: MalformedURLException) {
 | 
			
		||||
            e.sendSilentlyWithAcraWithName("htmlToWebview > item url")
 | 
			
		||||
        }
 | 
			
		||||
            try {
 | 
			
		||||
                val itemUrl = URL(url)
 | 
			
		||||
                baseUrl = itemUrl.protocol + "://" + itemUrl.host
 | 
			
		||||
            } catch (e: MalformedURLException) {
 | 
			
		||||
                e.sendSilentlyWithAcraWithName("htmlToWebview > item url")
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        val fontName = when (font) {
 | 
			
		||||
            getString(R.string.open_sans_font_id) -> "Open Sans"
 | 
			
		||||
            getString(R.string.roboto_font_id) -> "Roboto"
 | 
			
		||||
            getString(R.string.source_code_pro_font_id) -> "Source Code Pro"
 | 
			
		||||
            else -> ""
 | 
			
		||||
        }
 | 
			
		||||
            val fontName = when (font) {
 | 
			
		||||
                getString(R.string.open_sans_font_id) -> "Open Sans"
 | 
			
		||||
                getString(R.string.roboto_font_id) -> "Roboto"
 | 
			
		||||
                getString(R.string.source_code_pro_font_id) -> "Source Code Pro"
 | 
			
		||||
                else -> ""
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        val fontLinkAndStyle = if (font.isNotEmpty()) {
 | 
			
		||||
            """<link href="https://fonts.googleapis.com/css?family=${
 | 
			
		||||
                fontName.replace(
 | 
			
		||||
                    " ",
 | 
			
		||||
                    "+"
 | 
			
		||||
                )
 | 
			
		||||
            }" rel="stylesheet">
 | 
			
		||||
            val fontLinkAndStyle = if (font.isNotEmpty()) {
 | 
			
		||||
                """<link href="https://fonts.googleapis.com/css?family=${
 | 
			
		||||
                    fontName.replace(
 | 
			
		||||
                        " ",
 | 
			
		||||
                        "+"
 | 
			
		||||
                    )
 | 
			
		||||
                }" rel="stylesheet">
 | 
			
		||||
                |<style>
 | 
			
		||||
                |   * {
 | 
			
		||||
                |       font-family: '$fontName';
 | 
			
		||||
                |   }
 | 
			
		||||
                |</style>
 | 
			
		||||
            """.trimMargin()
 | 
			
		||||
        } else {
 | 
			
		||||
            ""
 | 
			
		||||
        }
 | 
			
		||||
            } else {
 | 
			
		||||
                ""
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        binding.webcontent.loadDataWithBaseURL(
 | 
			
		||||
            baseUrl,
 | 
			
		||||
            """<html>
 | 
			
		||||
            binding.webcontent.loadDataWithBaseURL(
 | 
			
		||||
                baseUrl,
 | 
			
		||||
                """<html>
 | 
			
		||||
                |<head>
 | 
			
		||||
                |   <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
                |   <style>
 | 
			
		||||
@@ -438,11 +447,11 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
                |      }
 | 
			
		||||
                |      a {
 | 
			
		||||
                |        color: ${
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "#%06X",
 | 
			
		||||
                    0xFFFFFF and resources.getColor(R.color.colorAccent)
 | 
			
		||||
                )
 | 
			
		||||
            } !important;
 | 
			
		||||
                    String.format(
 | 
			
		||||
                        "#%06X",
 | 
			
		||||
                        0xFFFFFF and resources.getColor(R.color.colorAccent)
 | 
			
		||||
                    )
 | 
			
		||||
                } !important;
 | 
			
		||||
                |      }
 | 
			
		||||
                |      *:not(a) {
 | 
			
		||||
                |        color: ${String.format("#%06X", 0xFFFFFF and colorOnSurface.data)};
 | 
			
		||||
@@ -454,25 +463,25 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
                |        overflow:hidden;
 | 
			
		||||
                |        line-height: 1.5em;
 | 
			
		||||
                |        background-color: ${
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "#%06X",
 | 
			
		||||
                    0xFFFFFF and colorSurface.data
 | 
			
		||||
                )
 | 
			
		||||
            };
 | 
			
		||||
                    String.format(
 | 
			
		||||
                        "#%06X",
 | 
			
		||||
                        0xFFFFFF and colorSurface.data
 | 
			
		||||
                    )
 | 
			
		||||
                };
 | 
			
		||||
                |      }
 | 
			
		||||
                |      body, html {
 | 
			
		||||
                |        background-color: ${
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "#%06X",
 | 
			
		||||
                    0xFFFFFF and colorSurface.data
 | 
			
		||||
                )
 | 
			
		||||
            } !important;
 | 
			
		||||
                    String.format(
 | 
			
		||||
                        "#%06X",
 | 
			
		||||
                        0xFFFFFF and colorSurface.data
 | 
			
		||||
                    )
 | 
			
		||||
                } !important;
 | 
			
		||||
                |        border-color: ${
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "#%06X",
 | 
			
		||||
                    0xFFFFFF and colorSurface.data
 | 
			
		||||
                )
 | 
			
		||||
            }  !important;
 | 
			
		||||
                    String.format(
 | 
			
		||||
                        "#%06X",
 | 
			
		||||
                        0xFFFFFF and colorSurface.data
 | 
			
		||||
                    )
 | 
			
		||||
                }  !important;
 | 
			
		||||
                |        padding: 0 !important;
 | 
			
		||||
                |        margin: 0 !important;
 | 
			
		||||
                |      }
 | 
			
		||||
@@ -483,11 +492,11 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
                |        white-space: pre-wrap;
 | 
			
		||||
                |        width:100%;
 | 
			
		||||
                |        background-color: ${
 | 
			
		||||
                String.format(
 | 
			
		||||
                    "#%06X",
 | 
			
		||||
                    0xFFFFFF and colorSurface.data
 | 
			
		||||
                )
 | 
			
		||||
            };
 | 
			
		||||
                    String.format(
 | 
			
		||||
                        "#%06X",
 | 
			
		||||
                        0xFFFFFF and colorSurface.data
 | 
			
		||||
                    )
 | 
			
		||||
                };
 | 
			
		||||
                |      }
 | 
			
		||||
                |   </style>
 | 
			
		||||
                |   $fontLinkAndStyle
 | 
			
		||||
@@ -495,10 +504,11 @@ class ArticleFragment : Fragment(), DIAware {
 | 
			
		||||
                |<body>
 | 
			
		||||
                |   $contentText
 | 
			
		||||
                |</body>""".trimMargin(),
 | 
			
		||||
            "text/html",
 | 
			
		||||
            "utf-8",
 | 
			
		||||
            null
 | 
			
		||||
        )
 | 
			
		||||
                "text/html",
 | 
			
		||||
                "utf-8",
 | 
			
		||||
                null
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun scrollDown() {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,6 @@ import org.kodein.di.instance
 | 
			
		||||
import org.kodein.di.singleton
 | 
			
		||||
 | 
			
		||||
val networkModule by DI.Module {
 | 
			
		||||
    bind<AppSettingsService>() with singleton { AppSettingsService() }
 | 
			
		||||
    bind<SelfossApi>() with singleton { SelfossApi(instance()) }
 | 
			
		||||
    bind<MercuryApi>() with singleton { MercuryApi() }
 | 
			
		||||
}
 | 
			
		||||
@@ -76,7 +76,7 @@ class SelfossModel {
 | 
			
		||||
    )
 | 
			
		||||
    @Serializable
 | 
			
		||||
    data class SourceParams(
 | 
			
		||||
        val url: String
 | 
			
		||||
        val url: String?
 | 
			
		||||
    )
 | 
			
		||||
    @Serializable
 | 
			
		||||
    data class Item(
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,70 @@
 | 
			
		||||
package bou.amine.apps.readerforselfossv2.service
 | 
			
		||||
 | 
			
		||||
import com.russhwolf.settings.Settings
 | 
			
		||||
 | 
			
		||||
// This will be used in ACRA process. For now, it does nothing.
 | 
			
		||||
// This is to fix ACRA not sending reports anymore.
 | 
			
		||||
// See https://www.acra.ch/docs/Troubleshooting-Guide#applicationoncreate
 | 
			
		||||
class ACRASettings : Settings {
 | 
			
		||||
    override val keys: Set<String> = emptySet()
 | 
			
		||||
    override val size: Int = 0
 | 
			
		||||
 | 
			
		||||
    override fun clear() {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun getBoolean(key: String, defaultValue: Boolean): Boolean = false
 | 
			
		||||
 | 
			
		||||
    override fun getBooleanOrNull(key: String): Boolean? = null
 | 
			
		||||
 | 
			
		||||
    override fun getDouble(key: String, defaultValue: Double): Double = 0.0
 | 
			
		||||
 | 
			
		||||
    override fun getDoubleOrNull(key: String): Double? = null
 | 
			
		||||
 | 
			
		||||
    override fun getFloat(key: String, defaultValue: Float): Float = 0.0F
 | 
			
		||||
 | 
			
		||||
    override fun getFloatOrNull(key: String): Float? = null
 | 
			
		||||
 | 
			
		||||
    override fun getInt(key: String, defaultValue: Int): Int = 0
 | 
			
		||||
 | 
			
		||||
    override fun getIntOrNull(key: String): Int? = null
 | 
			
		||||
 | 
			
		||||
    override fun getLong(key: String, defaultValue: Long): Long = 0
 | 
			
		||||
 | 
			
		||||
    override fun getLongOrNull(key: String): Long? = null
 | 
			
		||||
 | 
			
		||||
    override fun getString(key: String, defaultValue: String): String = "0"
 | 
			
		||||
 | 
			
		||||
    override fun getStringOrNull(key: String): String? = null
 | 
			
		||||
 | 
			
		||||
    override fun hasKey(key: String): Boolean = false
 | 
			
		||||
 | 
			
		||||
    override fun putBoolean(key: String, value: Boolean) {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun putDouble(key: String, value: Double) {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun putFloat(key: String, value: Float) {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun putInt(key: String, value: Int) {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun putLong(key: String, value: Long) {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun putString(key: String, value: String) {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun remove(key: String) {
 | 
			
		||||
        // Nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -2,8 +2,8 @@ package bou.amine.apps.readerforselfossv2.service
 | 
			
		||||
 | 
			
		||||
import com.russhwolf.settings.Settings
 | 
			
		||||
 | 
			
		||||
class AppSettingsService {
 | 
			
		||||
    val settings: Settings = Settings()
 | 
			
		||||
class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
 | 
			
		||||
    val settings: Settings = if (acraSenderServiceProcess) { ACRASettings() } else { Settings() }
 | 
			
		||||
 | 
			
		||||
    // Api related
 | 
			
		||||
    private var _apiVersion: Int = -1
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ fun SOURCE.toView(): SelfossModel.Source =
 | 
			
		||||
        this.spout,
 | 
			
		||||
        this.error,
 | 
			
		||||
        this.icon,
 | 
			
		||||
        if (this.url != null) SelfossModel.SourceParams(this.url) else null
 | 
			
		||||
        SelfossModel.SourceParams(this.url)
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
fun SelfossModel.Source.toEntity(): SOURCE =
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user