Compare commits
5 Commits
8e9b87f00c
...
v124010031
Author | SHA1 | Date | |
---|---|---|---|
6e27d6d4e6 | |||
14ff4dbd05 | |||
390c2d0cf3 | |||
e58914ef58 | |||
a03f08fca1 |
@ -1,3 +1,11 @@
|
||||
**v123113311**
|
||||
|
||||
- chore: Source tracker url in the menu.
|
||||
- fix: Handle kodein proguard rules.
|
||||
- Changelog for v123102961 [CI SKIP]
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
**v123102961**
|
||||
|
||||
- chore: domain changes.
|
||||
|
9
androidApp/proguard-rules.pro
vendored
9
androidApp/proguard-rules.pro
vendored
@ -86,3 +86,12 @@
|
||||
|
||||
-dontwarn io.mockk.**
|
||||
-keep class io.mockk.** { *; }
|
||||
|
||||
|
||||
|
||||
# Kodein
|
||||
-keep, allowobfuscation, allowoptimization class org.kodein.type.TypeReference
|
||||
-keep, allowobfuscation, allowoptimization class org.kodein.type.JVMAbstractTypeToken$Companion$WrappingTest
|
||||
|
||||
-keep, allowobfuscation, allowoptimization class * extends org.kodein.type.TypeReference
|
||||
-keep, allowobfuscation, allowoptimization class * extends org.kodein.type.JVMAbstractTypeToken$Companion$WrappingTest
|
@ -1,6 +1,7 @@
|
||||
package bou.amine.apps.readerforselfossv2.android
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
@ -565,6 +566,11 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.issue_tracker -> {
|
||||
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(AppSettingsService.trackerUrl))
|
||||
startActivity(browserIntent)
|
||||
return true
|
||||
}
|
||||
R.id.action_filter -> {
|
||||
val filterSheetFragment = FilterSheetFragment()
|
||||
filterSheetFragment.show(supportFragmentManager, FilterSheetFragment.TAG)
|
||||
|
@ -4,6 +4,7 @@ import android.animation.Animator
|
||||
import android.animation.AnimatorListenerAdapter
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
import android.view.Menu
|
||||
@ -139,20 +140,25 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
||||
repository.refreshLoginInformation(url, login, password)
|
||||
|
||||
CoroutineScope(Dispatchers.Main).launch {
|
||||
repository.updateApiInformation()
|
||||
try {
|
||||
repository.updateApiInformation()
|
||||
} catch (e: Exception) {
|
||||
if (e.message?.startsWith("No transformation found") == true) {
|
||||
Toast.makeText(
|
||||
applicationContext,
|
||||
R.string.application_selfoss_only,
|
||||
Toast.LENGTH_LONG,
|
||||
).show()
|
||||
preferenceError()
|
||||
showProgress(false)
|
||||
}
|
||||
}
|
||||
val result = repository.login()
|
||||
if (result) {
|
||||
val (errorFetching, displaySelfossOnly) = repository.shouldBeSelfossInstance()
|
||||
if (!errorFetching && !displaySelfossOnly) {
|
||||
val errorFetching = repository.checkIfFetchFails()
|
||||
if (!errorFetching) {
|
||||
goToMain()
|
||||
} else {
|
||||
if (displaySelfossOnly) {
|
||||
Toast.makeText(
|
||||
applicationContext,
|
||||
R.string.application_selfoss_only,
|
||||
Toast.LENGTH_LONG,
|
||||
).show()
|
||||
}
|
||||
preferenceError()
|
||||
}
|
||||
} else {
|
||||
@ -254,10 +260,17 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
R.id.issue_tracker -> {
|
||||
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(AppSettingsService.trackerUrl))
|
||||
startActivity(browserIntent)
|
||||
return true
|
||||
}
|
||||
R.id.about -> {
|
||||
LibsBuilder()
|
||||
.withAboutIconShown(true)
|
||||
.withAboutVersionShown(true)
|
||||
.withAboutSpecial2("Bug reports").withAboutSpecial2Description(AppSettingsService.trackerUrl)
|
||||
.withAboutSpecial1("Project Page").withAboutSpecial1Description(AppSettingsService.sourceUrl)
|
||||
.start(this)
|
||||
true
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import bou.amine.apps.readerforselfossv2.android.R
|
||||
import bou.amine.apps.readerforselfossv2.android.databinding.FilterFragmentBinding
|
||||
import bou.amine.apps.readerforselfossv2.android.sendSilentlyWithAcraWithName
|
||||
import bou.amine.apps.readerforselfossv2.repository.Repository
|
||||
import bou.amine.apps.readerforselfossv2.utils.getColorHexCode
|
||||
import bou.amine.apps.readerforselfossv2.utils.getHtmlDecoded
|
||||
import bou.amine.apps.readerforselfossv2.utils.getIcon
|
||||
import com.bumptech.glide.Glide
|
||||
@ -147,9 +148,9 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
|
||||
val gd = GradientDrawable()
|
||||
val gdColor =
|
||||
try {
|
||||
Color.parseColor(tag.color)
|
||||
Color.parseColor(tag.getColorHexCode())
|
||||
} catch (e: IllegalArgumentException) {
|
||||
e.sendSilentlyWithAcraWithName("color issue " + tag.color)
|
||||
e.sendSilentlyWithAcraWithName("color issue " + tag.color + " / " + tag.getColorHexCode())
|
||||
resources.getColor(R.color.colorPrimary)
|
||||
}
|
||||
gd.setColor(gdColor)
|
||||
|
@ -36,6 +36,12 @@
|
||||
android:orderInCategory="101"
|
||||
android:title="@string/menu_home_refresh" />
|
||||
|
||||
<item
|
||||
android:id="@+id/issue_tracker"
|
||||
app:showAsAction="never"
|
||||
android:orderInCategory="103"
|
||||
android:title="@string/issue_tracker_link" />
|
||||
|
||||
<item android:id="@+id/action_disconnect"
|
||||
android:title="@string/action_disconnect"
|
||||
android:orderInCategory="104"
|
||||
|
@ -3,6 +3,13 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
|
||||
|
||||
<item
|
||||
android:id="@+id/issue_tracker"
|
||||
app:showAsAction="never"
|
||||
android:orderInCategory="101"
|
||||
android:title="@string/issue_tracker_link" />
|
||||
|
||||
<item android:id="@+id/about"
|
||||
android:title="@string/action_about"
|
||||
android:orderInCategory="102"
|
||||
|
@ -8,7 +8,6 @@ import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
||||
import bou.amine.apps.readerforselfossv2.utils.*
|
||||
import io.github.aakira.napier.Napier
|
||||
import io.ktor.client.call.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@ -429,22 +428,19 @@ class Repository(
|
||||
return result
|
||||
}
|
||||
|
||||
suspend fun shouldBeSelfossInstance(): Pair<Boolean, Boolean> {
|
||||
suspend fun checkIfFetchFails(): Boolean {
|
||||
var fetchFailed = true
|
||||
var showSelfossOnlyModal = false
|
||||
if (isNetworkAvailable()) {
|
||||
try {
|
||||
// Trying to fetch one item, and check someone is trying to use the app with
|
||||
// a random rss feed, that would throw a NoTransformationFoundException
|
||||
fetchFailed = !api.getItemsWithoutCatch().success
|
||||
} catch (e: NoTransformationFoundException) {
|
||||
showSelfossOnlyModal = true
|
||||
} catch (e: Throwable) {
|
||||
Napier.e(e.stackTraceToString(), tag = "RepositoryImpl.shouldBeSelfossInstance")
|
||||
}
|
||||
}
|
||||
|
||||
return Pair(fetchFailed, showSelfossOnlyModal)
|
||||
return fetchFailed
|
||||
}
|
||||
|
||||
suspend fun logout() {
|
||||
|
@ -73,3 +73,13 @@ fun SelfossModel.Item.toEntity(): ITEM =
|
||||
this.tags.joinToString(","),
|
||||
this.author,
|
||||
)
|
||||
|
||||
fun SelfossModel.Tag.getColorHexCode(): String =
|
||||
if (this.color.length == 4) { // #000
|
||||
val char1 = this.color.get(1)
|
||||
val char2 = this.color.get(2)
|
||||
val char3 = this.color.get(3)
|
||||
"#$char1$char1$char2$char2$char3$char3"
|
||||
} else {
|
||||
this.color
|
||||
}
|
Reference in New Issue
Block a user