From 54b2ac7f248bcd444633d6bb0a80b1c0937ea9da Mon Sep 17 00:00:00 2001 From: Amine Date: Sun, 10 Sep 2017 12:59:51 +0200 Subject: [PATCH] Fixes #10. Fixes #68. --- CHANGELOG.md | 4 ++ app/build.gradle | 2 +- .../bou/readerforselfoss/AddSourceActivity.kt | 2 +- .../bou/readerforselfoss/HomeActivity.kt | 2 +- .../bou/readerforselfoss/LoginActivity.kt | 2 +- .../apps/amine/bou/readerforselfoss/MyApp.kt | 5 ++- .../bou/readerforselfoss/SourcesActivity.kt | 2 +- .../api/mercury/MercuryModels.kt | 24 +++++----- .../api/selfoss/SelfossApi.kt | 20 +++++++-- .../api/selfoss/SelfossModels.kt | 45 ++++++++++--------- app/src/main/res/values-fr/strings.xml | 3 ++ app/src/main/res/values-nl/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/pref_debug.xml | 7 +++ 14 files changed, 82 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1629f4f..54942dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +**1.5.2.18/19** + +- APK minification finally working. That means less space taken ! + **1.5.2.17** - Source code and tracker links weren't being set, and updated the contributing doc. diff --git a/app/build.gradle b/app/build.gradle index a6e8743..f9db75f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,7 +149,7 @@ dependencies { compile('com.github.bumptech.glide:okhttp3-integration:4.1.0@aar') // 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 compile 'com.klinkerapps:drag-dismiss-activity:1.4.3' diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/AddSourceActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/AddSourceActivity.kt index a9a3f44..e12c55f 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/AddSourceActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/AddSourceActivity.kt @@ -45,7 +45,7 @@ class AddSourceActivity : AppCompatActivity() { try { 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) { mustLoginToAddSource() } diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt index 3f29c6d..d7e6f27 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt @@ -147,7 +147,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { customTabActivityHelper = CustomTabActivityHelper() 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() appColors = AppColors(this@HomeActivity) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/LoginActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/LoginActivity.kt index 627d921..7c538c5 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/LoginActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/LoginActivity.kt @@ -211,7 +211,7 @@ class LoginActivity : AppCompatActivity() { editor.putBoolean("isSelfSignedCert", isWithSelfSignedCert) editor.apply() - val api = SelfossApi(this, this@LoginActivity, isWithSelfSignedCert) + val api = SelfossApi(this, this@LoginActivity, isWithSelfSignedCert, isWithSelfSignedCert) api.login().enqueue(object : Callback { private fun preferenceError(t: Throwable) { editor.remove("url") diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt index f159ba2..ead837f 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt @@ -12,6 +12,8 @@ import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions import com.crashlytics.android.Crashlytics 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.mikepenz.materialdrawer.util.AbstractDrawerImageLoader import com.mikepenz.materialdrawer.util.DrawerImageLoader @@ -49,7 +51,8 @@ class MyApp : MultiDexApplication() { private fun initAmplify() { Amplify.initSharedInstance(this) - .setFeedbackEmailAddress(BuildConfig.FEEDBACK_EMAIL) + .setPositiveFeedbackCollectors(GooglePlayStoreFeedbackCollector()) + .setCriticalFeedbackCollectors(DefaultEmailFeedbackCollector(BuildConfig.FEEDBACK_EMAIL)) .applyAllDefaultRules() } diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/SourcesActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/SourcesActivity.kt index 6bb2283..392b66b 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/SourcesActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/SourcesActivity.kt @@ -40,7 +40,7 @@ class SourcesActivity : AppCompatActivity() { 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 = ArrayList() mFab.attachToRecyclerView(mRecyclerView) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/api/mercury/MercuryModels.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/api/mercury/MercuryModels.kt index c4b2638..0ddeb85 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/api/mercury/MercuryModels.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/api/mercury/MercuryModels.kt @@ -2,20 +2,20 @@ package apps.amine.bou.readerforselfoss.api.mercury import android.os.Parcel import android.os.Parcelable +import com.google.gson.annotations.SerializedName - -class ParsedContent(val title: String, - val content: String, - val date_published: String, - val lead_image_url: String, - val dek: String, - val url: String, - val domain: String, - val excerpt: String, - val total_pages: Int, - val rendered_pages: Int, - val next_page_url: String) : Parcelable { +class ParsedContent(@SerializedName("title") val title: String, + @SerializedName("content") val content: String, + @SerializedName("date_published") val date_published: String, + @SerializedName("lead_image_url") val lead_image_url: String, + @SerializedName("dek") val dek: String, + @SerializedName("url") val url: String, + @SerializedName("domain") val domain: String, + @SerializedName("excerpt") val excerpt: String, + @SerializedName("total_pages") val total_pages: Int, + @SerializedName("rendered_pages") val rendered_pages: Int, + @SerializedName("next_page_url") val next_page_url: String) : Parcelable { companion object { @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt index 74810f0..22cefe6 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt @@ -19,10 +19,13 @@ import retrofit2.converter.gson.GsonConverterFactory import apps.amine.bou.readerforselfoss.utils.Config import apps.amine.bou.readerforselfoss.utils.getUnsafeHttpClient +import okhttp3.logging.HttpLoggingInterceptor + + // 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 val config: Config = Config(c) @@ -42,14 +45,13 @@ class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Bo .with("basic", BasicAuthenticator(this)) .build() - fun DispatchingAuthenticator.getHttpClien(isWithSelfSignedCert: Boolean): OkHttpClient { + fun DispatchingAuthenticator.getHttpClien(isWithSelfSignedCert: Boolean): OkHttpClient.Builder { val authCache = ConcurrentHashMap() return OkHttpClient .Builder() .maybeWithSelfSigned(isWithSelfSignedCert) .authenticator(CachingAuthenticatorDecorator(this, authCache)) .addInterceptor(AuthenticationCacheInterceptor(authCache)) - .build() } @@ -69,13 +71,23 @@ class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Bo .setLenient() .create() + val logging = HttpLoggingInterceptor() + + logging.level = if (shouldLog) + HttpLoggingInterceptor.Level.BODY + else + HttpLoggingInterceptor.Level.NONE + + val httpClient = authenticator.getHttpClien(isWithSelfSignedCert) + + httpClient.addInterceptor(logging) try { val retrofit = Retrofit .Builder() .baseUrl(config.baseUrl) - .client(authenticator.getHttpClien(isWithSelfSignedCert)) + .client(httpClient.build()) .addConverterFactory(GsonConverterFactory.create(gson)) .build() service = retrofit.create(SelfossService::class.java) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt index a734d84..f1f12e2 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt @@ -7,7 +7,7 @@ import android.os.Parcelable import apps.amine.bou.readerforselfoss.utils.Config import apps.amine.bou.readerforselfoss.utils.isEmptyOrNullOrNullString - +import com.google.gson.annotations.SerializedName 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 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, - val title: String, - val tags: String, - val spout: String, - val error: String, - val icon: String) { +data class Sources(@SerializedName("id") val id: String, + @SerializedName("title") val title: String, + @SerializedName("tags") val tags: String, + @SerializedName("spout") val spout: String, + @SerializedName("error") val error: String, + @SerializedName("icon") val icon: String) { var config: Config? = null fun getIcon(app: Context): String { @@ -47,15 +52,15 @@ data class Sources(val id: String, } -data class Item(val id: String, - val datetime: String, - val title: String, - val unread: Boolean, - val starred: Boolean, - val thumbnail: String, - val icon: String, - val link: String, - val sourcetitle: String) : Parcelable { +data class Item(@SerializedName("id") val id: String, + @SerializedName("datetime") val datetime: String, + @SerializedName("title") val title: String, + @SerializedName("unread") val unread: Boolean, + @SerializedName("starred") val starred: Boolean, + @SerializedName("thumbnail") val thumbnail: String, + @SerializedName("icon") val icon: String, + @SerializedName("link") val link: String, + @SerializedName("sourcetitle") val sourcetitle: String) : Parcelable { var config: Config? = null diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4b42365..5056ba9 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -147,4 +147,7 @@ Texte copié Afficher une entête avec l\'url de votre instance de Selfoss en haut du drawer lateral. Entête de compte + Log de tous les appels à l\'API + Aucun appel à l\'API ne sera logué + Tous les appels à l\'API vont êtres logués \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index a6f0c64..b2f7be7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -148,4 +148,7 @@ Display a header with the selfoss instance url on the lateral drawer. Account header + Logging every api calls + No api call will be logged + This will log every api call for debug purpose. \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c80ddf..0ba49fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,4 +150,7 @@ Display a header with the selfoss instance url on the lateral drawer. Account header + Logging every api calls + This will log every api call for debug purpose. + No api call will be logged \ No newline at end of file diff --git a/app/src/main/res/xml/pref_debug.xml b/app/src/main/res/xml/pref_debug.xml index 88dd264..19b2cf4 100644 --- a/app/src/main/res/xml/pref_debug.xml +++ b/app/src/main/res/xml/pref_debug.xml @@ -1,6 +1,13 @@ + +