Compare commits
No commits in common. "c4b6874e7c3647233784bc6ab94c2830d2174fb0" and "90532cf501e5cf42e4d31a6e3ff128e839b323cf" have entirely different histories.
c4b6874e7c
...
90532cf501
@ -114,16 +114,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
||||
}
|
||||
}
|
||||
|
||||
val swipeDirs = if (appSettingsService.getPublicAccess()) {
|
||||
0
|
||||
} else {
|
||||
ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
|
||||
}
|
||||
|
||||
val simpleItemTouchCallback =
|
||||
object : ItemTouchHelper.SimpleCallback(
|
||||
0,
|
||||
swipeDirs
|
||||
ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
|
||||
) {
|
||||
override fun getSwipeDirs(
|
||||
recyclerView: RecyclerView,
|
||||
@ -516,10 +510,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
val inflater = menuInflater
|
||||
inflater.inflate(R.menu.home_menu, menu)
|
||||
if (appSettingsService.getPublicAccess()) {
|
||||
menu.removeItem(R.id.readAll)
|
||||
menu.removeItem(R.id.action_sources)
|
||||
}
|
||||
|
||||
val searchItem = menu.findItem(R.id.action_search)
|
||||
val searchView = searchItem.getActionView() as SearchView
|
||||
|
@ -128,7 +128,7 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
||||
|
||||
private fun goToMain() {
|
||||
CoroutineScope(Dispatchers.Main).launch {
|
||||
repository.updateApiInformation()
|
||||
repository.updateApiVersion()
|
||||
ACRA.errorReporter.putCustomData("SELFOSS_API_VERSION", appSettingsService.getApiVersion().toString())
|
||||
}
|
||||
val intent = Intent(this, HomeActivity::class.java)
|
||||
|
@ -137,17 +137,12 @@ class ReaderActivity : AppCompatActivity(), DIAware {
|
||||
inflater.inflate(R.menu.reader_menu, menu)
|
||||
toolbarMenu = menu
|
||||
|
||||
alignmentMenu()
|
||||
|
||||
if (appSettingsService.getPublicAccess()) {
|
||||
menu.removeItem(R.id.star)
|
||||
} else {
|
||||
if (allItems.isNotEmpty() && allItems[currentItem].starred) {
|
||||
canRemoveFromFavorite()
|
||||
} else {
|
||||
canFavorite()
|
||||
}
|
||||
|
||||
alignmentMenu()
|
||||
|
||||
binding.pager.registerOnPageChangeCallback(
|
||||
object : ViewPager2.OnPageChangeCallback() {
|
||||
@ -164,7 +159,6 @@ class ReaderActivity : AppCompatActivity(), DIAware {
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
@ -183,7 +177,7 @@ class ReaderActivity : AppCompatActivity(), DIAware {
|
||||
|
||||
when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
onBackPressed()
|
||||
return true
|
||||
}
|
||||
R.id.star -> {
|
||||
|
@ -195,9 +195,6 @@ class ArticleFragment : Fragment(), DIAware {
|
||||
|
||||
private fun handleFloatingToolbar(): FloatingToolbar {
|
||||
val floatingToolbar: FloatingToolbar = binding.floatingToolbar
|
||||
if (appSettingsService.getPublicAccess()) {
|
||||
floatingToolbar.setMenu(R.menu.reader_toolbar_no_read)
|
||||
}
|
||||
floatingToolbar.attachFab(fab)
|
||||
|
||||
floatingToolbar.background = ColorDrawable(resources.getColor(R.color.colorAccent))
|
||||
|
@ -83,7 +83,7 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
android:layout_gravity="end|bottom|end">
|
||||
android:layout_gravity="end|bottom|right">
|
||||
|
||||
<com.github.rubensousa.floatingtoolbar.FloatingToolbar
|
||||
android:id="@+id/floatingToolbar"
|
||||
@ -96,9 +96,10 @@
|
||||
android:id="@+id/fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end|bottom|end"
|
||||
android:layout_gravity="end|bottom|right"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
android:src="@drawable/ic_add_white_24dp"
|
||||
|
@ -1,16 +0,0 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/open_action"
|
||||
android:icon="@drawable/ic_open_in_browser_white_24dp"
|
||||
android:title="@string/reader_action_open"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/share_action"
|
||||
android:icon="@drawable/ic_share_white_24dp"
|
||||
android:title="@string/reader_action_share"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
</menu>
|
@ -20,8 +20,6 @@ import org.junit.Test
|
||||
|
||||
private const val BASE_URL = "https://test.com/selfoss/"
|
||||
|
||||
private const val USERNAME = "username"
|
||||
|
||||
private const val SPOUT = "spouts\\rss\\fulltextrss"
|
||||
|
||||
private const val IMAGE_URL = "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"
|
||||
@ -51,7 +49,7 @@ class RepositoryTest {
|
||||
repository = Repository(api, appSettingsService, isConnectionAvailable, db)
|
||||
|
||||
runBlocking {
|
||||
repository.updateApiInformation()
|
||||
repository.updateApiVersion()
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,13 +58,12 @@ class RepositoryTest {
|
||||
clearAllMocks()
|
||||
every { appSettingsService.getApiVersion() } returns 4
|
||||
every { appSettingsService.getBaseUrl() } returns BASE_URL
|
||||
every { appSettingsService.getUserName() } returns USERNAME
|
||||
every { appSettingsService.isItemCachingEnabled() } returns false
|
||||
every { appSettingsService.isUpdateSourcesEnabled() } returns false
|
||||
|
||||
coEvery { api.apiInformation() } returns StatusAndData(
|
||||
coEvery { api.version() } returns StatusAndData(
|
||||
success = true,
|
||||
data = SelfossModel.ApiInformation("2.19-ba1e8e3", "4.0.0", SelfossModel.ApiConfiguration(false, true))
|
||||
data = SelfossModel.ApiVersion("2.19-ba1e8e3", "4.0.0")
|
||||
)
|
||||
coEvery { api.stats() } returns StatusAndData(
|
||||
success = true,
|
||||
@ -84,7 +81,7 @@ class RepositoryTest {
|
||||
fun instantiate_repository() {
|
||||
initializeRepository()
|
||||
|
||||
coVerify(exactly = 1) { api.apiInformation() }
|
||||
coVerify(exactly = 1) { api.version() }
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -93,7 +90,7 @@ class RepositoryTest {
|
||||
|
||||
initializeRepository(MutableStateFlow(false))
|
||||
|
||||
coVerify(exactly = 0) { api.apiInformation() }
|
||||
coVerify(exactly = 0) { api.version() }
|
||||
coVerify(exactly = 0) { api.stats() }
|
||||
}
|
||||
|
||||
@ -113,70 +110,10 @@ class RepositoryTest {
|
||||
verify(exactly = 1) { appSettingsService.updateApiVersion(4) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun get_public_access() {
|
||||
every { appSettingsService.updatePublicAccess(any()) } returns Unit
|
||||
coEvery { api.apiInformation() } returns StatusAndData(
|
||||
success = true,
|
||||
data = SelfossModel.ApiInformation("2.19-ba1e8e3", "4.0.0", SelfossModel.ApiConfiguration(true, true))
|
||||
)
|
||||
every { appSettingsService.getUserName() } returns ""
|
||||
|
||||
initializeRepository()
|
||||
|
||||
coVerify(exactly = 1) { api.apiInformation() }
|
||||
coVerify(exactly = 1) { appSettingsService.updatePublicAccess(true) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun get_public_access_username_not_empty() {
|
||||
every { appSettingsService.updatePublicAccess(any()) } returns Unit
|
||||
coEvery { api.apiInformation() } returns StatusAndData(
|
||||
success = true,
|
||||
data = SelfossModel.ApiInformation("2.19-ba1e8e3", "4.0.0", SelfossModel.ApiConfiguration(true, true))
|
||||
)
|
||||
every { appSettingsService.getUserName() } returns "username"
|
||||
|
||||
initializeRepository()
|
||||
|
||||
coVerify(exactly = 1) { api.apiInformation() }
|
||||
coVerify(exactly = 0) { appSettingsService.updatePublicAccess(true) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun get_public_access_no_auth() {
|
||||
every { appSettingsService.updatePublicAccess(any()) } returns Unit
|
||||
coEvery { api.apiInformation() } returns StatusAndData(
|
||||
success = true,
|
||||
data = SelfossModel.ApiInformation("2.19-ba1e8e3", "4.0.0", SelfossModel.ApiConfiguration(true, false))
|
||||
)
|
||||
every { appSettingsService.getUserName() } returns ""
|
||||
|
||||
initializeRepository()
|
||||
|
||||
coVerify(exactly = 1) { api.apiInformation() }
|
||||
coVerify(exactly = 0) { appSettingsService.updatePublicAccess(true) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun get_public_access_disabled() {
|
||||
every { appSettingsService.updatePublicAccess(any()) } returns Unit
|
||||
coEvery { api.apiInformation() } returns StatusAndData(
|
||||
success = true,
|
||||
data = SelfossModel.ApiInformation("2.19-ba1e8e3", "4.0.0", SelfossModel.ApiConfiguration(false, true))
|
||||
)
|
||||
every { appSettingsService.getUserName() } returns ""
|
||||
|
||||
initializeRepository()
|
||||
|
||||
coVerify(exactly = 1) { api.apiInformation() }
|
||||
coVerify(exactly = 0) { appSettingsService.updatePublicAccess(true) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun get_api_1_date_with_api_4_version_stored() {
|
||||
every { appSettingsService.getApiVersion() } returns 4
|
||||
coEvery { api.apiInformation() } returns StatusAndData(success = false, null)
|
||||
coEvery { api.version() } returns StatusAndData(success = false, null)
|
||||
val itemParameters = FakeItemParameters()
|
||||
itemParameters.datetime = "2021-04-23 11:45:32"
|
||||
coEvery { api.getItems(any(), any(), any(), any(), any(), any(), any()) } returns
|
||||
|
@ -35,10 +35,9 @@ class SelfossModel {
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class ApiInformation(
|
||||
data class ApiVersion(
|
||||
val version: String?,
|
||||
val apiversion: String?,
|
||||
val configuration: ApiConfiguration?
|
||||
val apiversion: String?
|
||||
) {
|
||||
fun getApiMajorVersion() : Int {
|
||||
var versionNumber = 0
|
||||
@ -47,20 +46,6 @@ class SelfossModel {
|
||||
}
|
||||
return versionNumber
|
||||
}
|
||||
|
||||
fun getApiConfiguration() = configuration ?: ApiConfiguration(null, null)
|
||||
}
|
||||
|
||||
@kotlinx.serialization.Serializable
|
||||
data class ApiConfiguration(
|
||||
@Serializable(with = BooleanSerializer::class)
|
||||
val publicMode: Boolean?,
|
||||
@Serializable(with = BooleanSerializer::class)
|
||||
val authEnabled: Boolean?
|
||||
) {
|
||||
fun isAuthEnabled() = authEnabled ?: true
|
||||
|
||||
fun isPublicModeEnabled() = publicMode ?: false
|
||||
}
|
||||
|
||||
@Serializable
|
||||
|
@ -439,20 +439,13 @@ class Repository(
|
||||
api.refreshLoginInformation()
|
||||
}
|
||||
|
||||
suspend fun updateApiInformation() {
|
||||
suspend fun updateApiVersion() {
|
||||
val apiMajorVersion = appSettingsService.getApiVersion()
|
||||
|
||||
if (isNetworkAvailable()) {
|
||||
val fetchedInformation = api.apiInformation()
|
||||
if (fetchedInformation.success && fetchedInformation.data != null) {
|
||||
if (fetchedInformation.data.getApiMajorVersion() != apiMajorVersion) {
|
||||
appSettingsService.updateApiVersion(fetchedInformation.data.getApiMajorVersion())
|
||||
}
|
||||
if (appSettingsService.getUserName().isEmpty()
|
||||
&& fetchedInformation.data.getApiConfiguration().isAuthEnabled()
|
||||
&& fetchedInformation.data.getApiConfiguration().isPublicModeEnabled()) {
|
||||
appSettingsService.updatePublicAccess(true)
|
||||
}
|
||||
val fetchedVersion = api.version()
|
||||
if (fetchedVersion.success && fetchedVersion.data != null && fetchedVersion.data.getApiMajorVersion() != apiMajorVersion) {
|
||||
appSettingsService.updateApiVersion(fetchedVersion.data.getApiMajorVersion())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ class SelfossApi(private val appSettingsService: AppSettingsService) {
|
||||
}
|
||||
})
|
||||
|
||||
suspend fun apiInformation(): StatusAndData<SelfossModel.ApiInformation> =
|
||||
suspend fun version(): StatusAndData<SelfossModel.ApiVersion> =
|
||||
bodyOrFailure(client.tryToGet(url("/api/about")))
|
||||
|
||||
suspend fun markAsRead(id: String): SuccessResponse =
|
||||
|
@ -7,7 +7,6 @@ class AppSettingsService {
|
||||
|
||||
// Api related
|
||||
private var _apiVersion: Int = -1
|
||||
private var _publicAccess: Boolean? = null
|
||||
private var _baseUrl: String = ""
|
||||
private var _userName: String = ""
|
||||
private var _password: String = ""
|
||||
@ -49,32 +48,10 @@ class AppSettingsService {
|
||||
return _apiVersion
|
||||
}
|
||||
|
||||
|
||||
fun updateApiVersion(apiMajorVersion: Int) {
|
||||
settings.putInt(API_VERSION_MAJOR, apiMajorVersion)
|
||||
refreshApiVersion()
|
||||
}
|
||||
|
||||
private fun refreshApiVersion() {
|
||||
_apiVersion = settings.getInt(API_VERSION_MAJOR, -1)
|
||||
}
|
||||
|
||||
fun getPublicAccess(): Boolean {
|
||||
if (_publicAccess == null) {
|
||||
refreshPublicAccess()
|
||||
}
|
||||
return _publicAccess!!
|
||||
}
|
||||
|
||||
fun updatePublicAccess(publicAccess: Boolean) {
|
||||
settings.putBoolean(API_PUBLIC_ACCESS, publicAccess)
|
||||
refreshPublicAccess()
|
||||
}
|
||||
|
||||
private fun refreshPublicAccess() {
|
||||
_publicAccess = settings.getBoolean(API_PUBLIC_ACCESS, false)
|
||||
}
|
||||
|
||||
fun getBaseUrl(): String {
|
||||
if (_baseUrl.isEmpty()) {
|
||||
refreshBaseUrl()
|
||||
@ -356,7 +333,6 @@ class AppSettingsService {
|
||||
refreshUsername()
|
||||
refreshBaseUrl()
|
||||
refreshApiVersion()
|
||||
refreshPublicAccess()
|
||||
}
|
||||
|
||||
fun refreshUserSettings() {
|
||||
@ -400,6 +376,11 @@ class AppSettingsService {
|
||||
refreshApiSettings()
|
||||
}
|
||||
|
||||
fun updateApiVersion(apiMajorVersion: Int) {
|
||||
settings.putInt(API_VERSION_MAJOR, apiMajorVersion)
|
||||
refreshApiVersion()
|
||||
}
|
||||
|
||||
fun clearAll() {
|
||||
settings.clear()
|
||||
refreshApiSettings()
|
||||
@ -428,8 +409,6 @@ class AppSettingsService {
|
||||
|
||||
const val API_VERSION_MAJOR = "apiVersionMajor"
|
||||
|
||||
const val API_PUBLIC_ACCESS = "apiPublicAccess"
|
||||
|
||||
const val API_ITEMS_NUMBER = "prefer_api_items_number"
|
||||
|
||||
const val API_TIMEOUT = "api_timeout"
|
||||
|
Loading…
Reference in New Issue
Block a user