Use java.date to parse dates (#377)

* Use java.date to parse dates

* Enable core library desugaring
This commit is contained in:
davidoskky 2021-11-12 21:31:17 +01:00 committed by GitHub
parent e1efe9643c
commit a2933ac763
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 43 additions and 25 deletions

View File

@ -32,6 +32,9 @@ apply plugin: 'kotlin-kapt'
android { android {
compileOptions { compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
@ -115,6 +118,8 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:2.1.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'org.jsoup:jsoup:1.14.3' implementation 'org.jsoup:jsoup:1.14.3'
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5")
//multidex //multidex
implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.multidex:multidex:2.0.1'

View File

@ -340,20 +340,16 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
private fun getApiMajorVersion() { private fun getApiMajorVersion() {
api.apiVersion.enqueue(object : Callback<ApiVersion> { api.apiVersion.enqueue(object : Callback<ApiVersion> {
override fun onFailure(call: Call<ApiVersion>, t: Throwable) { override fun onFailure(call: Call<ApiVersion>, t: Throwable) {
if (apiVersionMajor >= 4) { Config.apiVersion = apiVersionMajor
Config.dateTimeFormatter = "yyyy-MM-dd'T'HH:mm:ssXXX"
}
} }
override fun onResponse(call: Call<ApiVersion>, response: Response<ApiVersion>) { override fun onResponse(call: Call<ApiVersion>, response: Response<ApiVersion>) {
if(response.body() != null) { if(response.body() != null) {
val version = response.body() as ApiVersion val version = response.body() as ApiVersion
apiVersionMajor = version.getApiMajorVersion() apiVersionMajor = version.getApiMajorVersion()
sharedPref.edit().putInt("apiVersionMajor", apiVersionMajor).commit() sharedPref.edit().putInt("apiVersionMajor", apiVersionMajor).apply()
if (apiVersionMajor >= 4) { Config.apiVersion = apiVersionMajor
Config.dateTimeFormatter = "yyyy-MM-dd'T'HH:mm:ssXXX"
}
} }
} }
}) })

View File

@ -40,7 +40,7 @@ class Config(c: Context) {
const val newItemsChannelId = "new-items-channel-id" const val newItemsChannelId = "new-items-channel-id"
var dateTimeFormatter = "yyyy-MM-dd HH:mm:ss" var apiVersion = 0
fun logoutAndRedirect( fun logoutAndRedirect(
c: Context, c: Context,

View File

@ -0,0 +1,31 @@
package apps.amine.bou.readerforselfoss.utils
import android.text.format.DateUtils
import java.time.Instant
import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
fun parseDate(dateString: String): Instant {
val FORMATTERV1 = "yyyy-MM-dd HH:mm:ss"
return if (Config.apiVersion >= 4) {
OffsetDateTime.parse(dateString).toInstant()
} else {
LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern(FORMATTERV1)).toInstant(ZoneOffset.UTC)
}
}
fun parseRelativeDate(dateString: String): String {
val date = parseDate(dateString)
return " " + DateUtils.getRelativeTimeSpanString(
date.toEpochMilli(),
Instant.now().toEpochMilli(),
DateUtils.MINUTE_IN_MILLIS,
DateUtils.FORMAT_ABBREV_RELATIVE
)
}

View File

@ -1,16 +1,12 @@
package apps.amine.bou.readerforselfoss.utils package apps.amine.bou.readerforselfoss.utils
import android.content.Context import android.content.Context
import android.text.format.DateUtils
import apps.amine.bou.readerforselfoss.api.selfoss.Item import apps.amine.bou.readerforselfoss.api.selfoss.Item
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossTagType import apps.amine.bou.readerforselfoss.api.selfoss.SelfossTagType
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
fun String.toTextDrawableString(c: Context): String { fun String.toTextDrawableString(c: Context): String {
val textDrawable = StringBuilder() val textDrawable = StringBuilder()
for (s in this.split(" ".toRegex()).filter { !it.isEmpty() }.toTypedArray()) { for (s in this.split(" ".toRegex()).filter { it.isNotEmpty() }.toTypedArray()) {
try { try {
textDrawable.append(s[0]) textDrawable.append(s[0])
} catch (e: StringIndexOutOfBoundsException) { } catch (e: StringIndexOutOfBoundsException) {
@ -20,17 +16,7 @@ fun String.toTextDrawableString(c: Context): String {
} }
fun Item.sourceAndDateText(): String { fun Item.sourceAndDateText(): String {
val formattedDate: String = try { val formattedDate = parseRelativeDate(this.datetime)
" " + DateUtils.getRelativeTimeSpanString(
SimpleDateFormat(Config.dateTimeFormatter).parse(this.datetime).time,
Date().time,
DateUtils.MINUTE_IN_MILLIS,
DateUtils.FORMAT_ABBREV_RELATIVE
)
} catch (e: ParseException) {
e.printStackTrace()
""
}
return this.getSourceTitle() + formattedDate return this.getSourceTitle() + formattedDate
} }

View File

@ -398,7 +398,7 @@ object SharedItems {
} }
private fun sortItems() { private fun sortItems() {
val tmpItems = ArrayList(items.sortedByDescending { SimpleDateFormat(Config.dateTimeFormatter).parse((it.datetime)) }) val tmpItems = ArrayList(items.sortedByDescending { parseDate(it.datetime) })
items = tmpItems items = tmpItems
} }
} }