Compare commits
19 Commits
v123010301
...
v123030621
Author | SHA1 | Date | |
---|---|---|---|
f72ef2f5d4 | |||
f28cb759df | |||
b9d69c3e64 | |||
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:
|
||||
|
35
CHANGELOG.md
35
CHANGELOG.md
@ -1,3 +1,38 @@
|
||||
**v123020572**
|
||||
|
||||
- fix: requirecontext issues ?
|
||||
- debug: activity not found exception.
|
||||
- Changelog for v123020571 [CI SKIP]
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
**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>
|
||||
|
@ -145,8 +145,8 @@ dependencies {
|
||||
implementation("com.amulyakhare:com.amulyakhare.textdrawable:1.0.1")
|
||||
|
||||
// glide
|
||||
kapt("com.github.bumptech.glide:compiler:4.14.2")
|
||||
implementation("com.github.bumptech.glide:okhttp3-integration:4.14.2")
|
||||
kapt("com.github.bumptech.glide:compiler:4.15.0")
|
||||
implementation("com.github.bumptech.glide:okhttp3-integration:4.15.0")
|
||||
|
||||
// Themes
|
||||
implementation("com.github.rubensousa:floatingtoolbar:1.5.1")
|
||||
|
@ -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,6 +151,7 @@ class ArticleFragment : Fragment(), DIAware {
|
||||
|
||||
} catch (e: InflateException) {
|
||||
e.sendSilentlyWithAcraWithName("webview not available")
|
||||
if (context != null) {
|
||||
AlertDialog.Builder(requireContext())
|
||||
.setMessage(requireContext().getString(R.string.webview_dialog_issue_message))
|
||||
.setTitle(requireContext().getString(R.string.webview_dialog_issue_title))
|
||||
@ -162,6 +164,7 @@ class ArticleFragment : Fragment(), DIAware {
|
||||
.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) {
|
||||
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,7 +368,7 @@ class ArticleFragment : Fragment(), DIAware {
|
||||
}
|
||||
|
||||
private fun htmlToWebview() {
|
||||
|
||||
if (context != null) {
|
||||
val attrs: IntArray = intArrayOf(android.R.attr.fontFamily)
|
||||
val a: TypedArray = requireContext().obtainStyledAttributes(resId, attrs)
|
||||
|
||||
@ -500,6 +509,7 @@ class ArticleFragment : Fragment(), DIAware {
|
||||
null
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun scrollDown() {
|
||||
val height = binding.nestedScrollView.measuredHeight
|
||||
|
@ -20,10 +20,8 @@ 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.load.DataSource
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.target.Target
|
||||
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
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@ -90,31 +88,19 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
|
||||
|
||||
Glide.with(context)
|
||||
.load(source.getIcon(repository.baseUrl))
|
||||
.listener(object : RequestListener<Drawable?> {
|
||||
override fun onLoadFailed(
|
||||
e: GlideException?,
|
||||
model: Any?,
|
||||
target: Target<Drawable?>?,
|
||||
isFirstResource: Boolean
|
||||
): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
.into(object : ViewTarget<Chip?, Drawable?>(c) {
|
||||
override fun onResourceReady(
|
||||
resource: Drawable?,
|
||||
model: Any?,
|
||||
target: Target<Drawable?>?,
|
||||
dataSource: DataSource?,
|
||||
isFirstResource: Boolean
|
||||
): Boolean {
|
||||
resource: Drawable,
|
||||
transition: Transition<in Drawable?>?
|
||||
) {
|
||||
try {
|
||||
c.chipIcon = resource
|
||||
} catch (e: Exception) {
|
||||
e.sendSilentlyWithAcraWithName("sources > onResourceReady")
|
||||
}
|
||||
return false
|
||||
}
|
||||
}).preload()
|
||||
|
||||
})
|
||||
|
||||
c.text = source.title.getHtmlDecoded()
|
||||
|
||||
|
@ -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? = null
|
||||
)
|
||||
@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
|
||||
|
Reference in New Issue
Block a user