parent
12356a35fa
commit
54b2ac7f24
@ -1,3 +1,7 @@
|
|||||||
|
**1.5.2.18/19**
|
||||||
|
|
||||||
|
- APK minification finally working. That means less space taken !
|
||||||
|
|
||||||
**1.5.2.17**
|
**1.5.2.17**
|
||||||
|
|
||||||
- Source code and tracker links weren't being set, and updated the contributing doc.
|
- Source code and tracker links weren't being set, and updated the contributing doc.
|
||||||
|
@ -149,7 +149,7 @@ dependencies {
|
|||||||
compile('com.github.bumptech.glide:okhttp3-integration:4.1.0@aar')
|
compile('com.github.bumptech.glide:okhttp3-integration:4.1.0@aar')
|
||||||
|
|
||||||
// Asking politely users to rate the app
|
// Asking politely users to rate the app
|
||||||
compile 'com.github.stkent:amplify:1.5.0'
|
compile 'com.github.stkent:amplify:2.1.0'
|
||||||
|
|
||||||
// For the article reader
|
// For the article reader
|
||||||
compile 'com.klinkerapps:drag-dismiss-activity:1.4.3'
|
compile 'com.klinkerapps:drag-dismiss-activity:1.4.3'
|
||||||
|
@ -45,7 +45,7 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
api = SelfossApi(this, this@AddSourceActivity, prefs.getBoolean("isSelfSignedCert", false))
|
api = SelfossApi(this, this@AddSourceActivity, prefs.getBoolean("isSelfSignedCert", false), prefs.getBoolean("should_log_everything", false))
|
||||||
} catch (e: IllegalArgumentException) {
|
} catch (e: IllegalArgumentException) {
|
||||||
mustLoginToAddSource()
|
mustLoginToAddSource()
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
customTabActivityHelper = CustomTabActivityHelper()
|
customTabActivityHelper = CustomTabActivityHelper()
|
||||||
|
|
||||||
val dirtyPref = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
val dirtyPref = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||||
api = SelfossApi(this, this@HomeActivity, dirtyPref.getBoolean("isSelfSignedCert", false))
|
api = SelfossApi(this, this@HomeActivity, dirtyPref.getBoolean("isSelfSignedCert", false), dirtyPref.getBoolean("should_log_everything", false))
|
||||||
items = ArrayList()
|
items = ArrayList()
|
||||||
|
|
||||||
appColors = AppColors(this@HomeActivity)
|
appColors = AppColors(this@HomeActivity)
|
||||||
|
@ -211,7 +211,7 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
editor.putBoolean("isSelfSignedCert", isWithSelfSignedCert)
|
editor.putBoolean("isSelfSignedCert", isWithSelfSignedCert)
|
||||||
editor.apply()
|
editor.apply()
|
||||||
|
|
||||||
val api = SelfossApi(this, this@LoginActivity, isWithSelfSignedCert)
|
val api = SelfossApi(this, this@LoginActivity, isWithSelfSignedCert, isWithSelfSignedCert)
|
||||||
api.login().enqueue(object : Callback<SuccessResponse> {
|
api.login().enqueue(object : Callback<SuccessResponse> {
|
||||||
private fun preferenceError(t: Throwable) {
|
private fun preferenceError(t: Throwable) {
|
||||||
editor.remove("url")
|
editor.remove("url")
|
||||||
|
@ -12,6 +12,8 @@ import com.bumptech.glide.Glide
|
|||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.crashlytics.android.Crashlytics
|
import com.crashlytics.android.Crashlytics
|
||||||
import com.ftinc.scoop.Scoop
|
import com.ftinc.scoop.Scoop
|
||||||
|
import com.github.stkent.amplify.feedback.DefaultEmailFeedbackCollector
|
||||||
|
import com.github.stkent.amplify.feedback.GooglePlayStoreFeedbackCollector
|
||||||
import com.github.stkent.amplify.tracking.Amplify
|
import com.github.stkent.amplify.tracking.Amplify
|
||||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
||||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||||
@ -49,7 +51,8 @@ class MyApp : MultiDexApplication() {
|
|||||||
|
|
||||||
private fun initAmplify() {
|
private fun initAmplify() {
|
||||||
Amplify.initSharedInstance(this)
|
Amplify.initSharedInstance(this)
|
||||||
.setFeedbackEmailAddress(BuildConfig.FEEDBACK_EMAIL)
|
.setPositiveFeedbackCollectors(GooglePlayStoreFeedbackCollector())
|
||||||
|
.setCriticalFeedbackCollectors(DefaultEmailFeedbackCollector(BuildConfig.FEEDBACK_EMAIL))
|
||||||
.applyAllDefaultRules()
|
.applyAllDefaultRules()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ class SourcesActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
|
|
||||||
val api = SelfossApi(this, this@SourcesActivity, prefs.getBoolean("isSelfSignedCert", false))
|
val api = SelfossApi(this, this@SourcesActivity, prefs.getBoolean("isSelfSignedCert", false), prefs.getBoolean("should_log_everything", false))
|
||||||
var items: ArrayList<Sources> = ArrayList()
|
var items: ArrayList<Sources> = ArrayList()
|
||||||
|
|
||||||
mFab.attachToRecyclerView(mRecyclerView)
|
mFab.attachToRecyclerView(mRecyclerView)
|
||||||
|
@ -2,20 +2,20 @@ package apps.amine.bou.readerforselfoss.api.mercury
|
|||||||
|
|
||||||
import android.os.Parcel
|
import android.os.Parcel
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
|
import com.google.gson.annotations.SerializedName
|
||||||
|
|
||||||
|
|
||||||
|
class ParsedContent(@SerializedName("title") val title: String,
|
||||||
class ParsedContent(val title: String,
|
@SerializedName("content") val content: String,
|
||||||
val content: String,
|
@SerializedName("date_published") val date_published: String,
|
||||||
val date_published: String,
|
@SerializedName("lead_image_url") val lead_image_url: String,
|
||||||
val lead_image_url: String,
|
@SerializedName("dek") val dek: String,
|
||||||
val dek: String,
|
@SerializedName("url") val url: String,
|
||||||
val url: String,
|
@SerializedName("domain") val domain: String,
|
||||||
val domain: String,
|
@SerializedName("excerpt") val excerpt: String,
|
||||||
val excerpt: String,
|
@SerializedName("total_pages") val total_pages: Int,
|
||||||
val total_pages: Int,
|
@SerializedName("rendered_pages") val rendered_pages: Int,
|
||||||
val rendered_pages: Int,
|
@SerializedName("next_page_url") val next_page_url: String) : Parcelable {
|
||||||
val next_page_url: String) : Parcelable {
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@JvmField val CREATOR: Parcelable.Creator<ParsedContent> = object : Parcelable.Creator<ParsedContent> {
|
@JvmField val CREATOR: Parcelable.Creator<ParsedContent> = object : Parcelable.Creator<ParsedContent> {
|
||||||
|
@ -19,10 +19,13 @@ import retrofit2.converter.gson.GsonConverterFactory
|
|||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
import apps.amine.bou.readerforselfoss.utils.getUnsafeHttpClient
|
import apps.amine.bou.readerforselfoss.utils.getUnsafeHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// codebeat:disable[ARITY,TOO_MANY_FUNCTIONS]
|
// codebeat:disable[ARITY,TOO_MANY_FUNCTIONS]
|
||||||
class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Boolean) {
|
class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Boolean, shouldLog: Boolean) {
|
||||||
|
|
||||||
private lateinit var service: SelfossService
|
private lateinit var service: SelfossService
|
||||||
private val config: Config = Config(c)
|
private val config: Config = Config(c)
|
||||||
@ -42,14 +45,13 @@ class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Bo
|
|||||||
.with("basic", BasicAuthenticator(this))
|
.with("basic", BasicAuthenticator(this))
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
fun DispatchingAuthenticator.getHttpClien(isWithSelfSignedCert: Boolean): OkHttpClient {
|
fun DispatchingAuthenticator.getHttpClien(isWithSelfSignedCert: Boolean): OkHttpClient.Builder {
|
||||||
val authCache = ConcurrentHashMap<String, CachingAuthenticator>()
|
val authCache = ConcurrentHashMap<String, CachingAuthenticator>()
|
||||||
return OkHttpClient
|
return OkHttpClient
|
||||||
.Builder()
|
.Builder()
|
||||||
.maybeWithSelfSigned(isWithSelfSignedCert)
|
.maybeWithSelfSigned(isWithSelfSignedCert)
|
||||||
.authenticator(CachingAuthenticatorDecorator(this, authCache))
|
.authenticator(CachingAuthenticatorDecorator(this, authCache))
|
||||||
.addInterceptor(AuthenticationCacheInterceptor(authCache))
|
.addInterceptor(AuthenticationCacheInterceptor(authCache))
|
||||||
.build()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -69,13 +71,23 @@ class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Bo
|
|||||||
.setLenient()
|
.setLenient()
|
||||||
.create()
|
.create()
|
||||||
|
|
||||||
|
val logging = HttpLoggingInterceptor()
|
||||||
|
|
||||||
|
logging.level = if (shouldLog)
|
||||||
|
HttpLoggingInterceptor.Level.BODY
|
||||||
|
else
|
||||||
|
HttpLoggingInterceptor.Level.NONE
|
||||||
|
|
||||||
|
val httpClient = authenticator.getHttpClien(isWithSelfSignedCert)
|
||||||
|
|
||||||
|
httpClient.addInterceptor(logging)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val retrofit =
|
val retrofit =
|
||||||
Retrofit
|
Retrofit
|
||||||
.Builder()
|
.Builder()
|
||||||
.baseUrl(config.baseUrl)
|
.baseUrl(config.baseUrl)
|
||||||
.client(authenticator.getHttpClien(isWithSelfSignedCert))
|
.client(httpClient.build())
|
||||||
.addConverterFactory(GsonConverterFactory.create(gson))
|
.addConverterFactory(GsonConverterFactory.create(gson))
|
||||||
.build()
|
.build()
|
||||||
service = retrofit.create(SelfossService::class.java)
|
service = retrofit.create(SelfossService::class.java)
|
||||||
|
@ -7,7 +7,7 @@ import android.os.Parcelable
|
|||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
import apps.amine.bou.readerforselfoss.utils.isEmptyOrNullOrNullString
|
import apps.amine.bou.readerforselfoss.utils.isEmptyOrNullOrNullString
|
||||||
|
import com.google.gson.annotations.SerializedName
|
||||||
|
|
||||||
|
|
||||||
private fun constructUrl(config: Config?, path: String, file: String): String {
|
private fun constructUrl(config: Config?, path: String, file: String): String {
|
||||||
@ -19,23 +19,28 @@ private fun constructUrl(config: Config?, path: String, file: String): String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
data class Tag(val tag: String, val color: String, val unread: Int)
|
data class Tag(@SerializedName("tag") val tag: String,
|
||||||
|
@SerializedName("color") val color: String,
|
||||||
|
@SerializedName("unread") val unread: Int)
|
||||||
|
|
||||||
class SuccessResponse(val success: Boolean) {
|
class SuccessResponse(@SerializedName("success") val success: Boolean) {
|
||||||
val isSuccess: Boolean
|
val isSuccess: Boolean
|
||||||
get() = success
|
get() = success
|
||||||
}
|
}
|
||||||
|
|
||||||
class Stats(val total: Int, val unread: Int, val starred: Int)
|
class Stats(@SerializedName("total") val total: Int,
|
||||||
|
@SerializedName("unread") val unread: Int,
|
||||||
|
@SerializedName("starred") val starred: Int)
|
||||||
|
|
||||||
data class Spout(val name: String, val description: String)
|
data class Spout(@SerializedName("name") val name: String,
|
||||||
|
@SerializedName("description") val description: String)
|
||||||
|
|
||||||
data class Sources(val id: String,
|
data class Sources(@SerializedName("id") val id: String,
|
||||||
val title: String,
|
@SerializedName("title") val title: String,
|
||||||
val tags: String,
|
@SerializedName("tags") val tags: String,
|
||||||
val spout: String,
|
@SerializedName("spout") val spout: String,
|
||||||
val error: String,
|
@SerializedName("error") val error: String,
|
||||||
val icon: String) {
|
@SerializedName("icon") val icon: String) {
|
||||||
var config: Config? = null
|
var config: Config? = null
|
||||||
|
|
||||||
fun getIcon(app: Context): String {
|
fun getIcon(app: Context): String {
|
||||||
@ -47,15 +52,15 @@ data class Sources(val id: String,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data class Item(val id: String,
|
data class Item(@SerializedName("id") val id: String,
|
||||||
val datetime: String,
|
@SerializedName("datetime") val datetime: String,
|
||||||
val title: String,
|
@SerializedName("title") val title: String,
|
||||||
val unread: Boolean,
|
@SerializedName("unread") val unread: Boolean,
|
||||||
val starred: Boolean,
|
@SerializedName("starred") val starred: Boolean,
|
||||||
val thumbnail: String,
|
@SerializedName("thumbnail") val thumbnail: String,
|
||||||
val icon: String,
|
@SerializedName("icon") val icon: String,
|
||||||
val link: String,
|
@SerializedName("link") val link: String,
|
||||||
val sourcetitle: String) : Parcelable {
|
@SerializedName("sourcetitle") val sourcetitle: String) : Parcelable {
|
||||||
|
|
||||||
var config: Config? = null
|
var config: Config? = null
|
||||||
|
|
||||||
|
@ -147,4 +147,7 @@
|
|||||||
<string name="unique_id_to_clipboard">Texte copié</string>
|
<string name="unique_id_to_clipboard">Texte copié</string>
|
||||||
<string name="display_header_drawer_summary">Afficher une entête avec l\'url de votre instance de Selfoss en haut du drawer lateral.</string>
|
<string name="display_header_drawer_summary">Afficher une entête avec l\'url de votre instance de Selfoss en haut du drawer lateral.</string>
|
||||||
<string name="display_header_drawer_title">Entête de compte</string>
|
<string name="display_header_drawer_title">Entête de compte</string>
|
||||||
|
<string name="login_everything_title">Log de tous les appels à l\'API</string>
|
||||||
|
<string name="login_everything_off">Aucun appel à l\'API ne sera logué</string>
|
||||||
|
<string name="login_everything_on">Tous les appels à l\'API vont êtres logués</string>
|
||||||
</resources>
|
</resources>
|
@ -148,4 +148,7 @@
|
|||||||
<string
|
<string
|
||||||
name="display_header_drawer_summary">Display a header with the selfoss instance url on the lateral drawer.</string>
|
name="display_header_drawer_summary">Display a header with the selfoss instance url on the lateral drawer.</string>
|
||||||
<string name="display_header_drawer_title">Account header</string>
|
<string name="display_header_drawer_title">Account header</string>
|
||||||
|
<string name="login_everything_title">Logging every api calls</string>
|
||||||
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
|
<string name="login_everything_on">This will log every api call for debug purpose.</string>
|
||||||
</resources>
|
</resources>
|
@ -150,4 +150,7 @@
|
|||||||
<string
|
<string
|
||||||
name="display_header_drawer_summary">Display a header with the selfoss instance url on the lateral drawer.</string>
|
name="display_header_drawer_summary">Display a header with the selfoss instance url on the lateral drawer.</string>
|
||||||
<string name="display_header_drawer_title">Account header</string>
|
<string name="display_header_drawer_title">Account header</string>
|
||||||
|
<string name="login_everything_title">Logging every api calls</string>
|
||||||
|
<string name="login_everything_on">This will log every api call for debug purpose.</string>
|
||||||
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
</resources>
|
</resources>
|
@ -1,6 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="should_log_everything"
|
||||||
|
android:summaryOff="@string/login_everything_off"
|
||||||
|
android:summaryOn="@string/login_everything_on"
|
||||||
|
android:title="@string/login_everything_title" />
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="loging_debug"
|
android:key="loging_debug"
|
||||||
|
Loading…
Reference in New Issue
Block a user