Removed retrofit/gson use + fix lint issues

hh
Laurent 6 years ago
parent 8ddcadfb00
commit 968a694df9
  1. 10
      app/build.gradle
  2. 80
      app/src/main/java/net/pokeranalytics/android/api/CurrencyConverterApi.kt
  3. 51
      app/src/main/java/net/pokeranalytics/android/api/FreeConverterApi.kt
  4. 60
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/BankrollDataFragment.kt
  5. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/EditableDataFragment.kt
  6. 2
      app/src/main/res/values-de/strings.xml
  7. 2
      app/src/main/res/values-es/strings.xml
  8. 2
      app/src/main/res/values-fr/strings.xml
  9. 2
      app/src/main/res/values-hi/strings.xml
  10. 2
      app/src/main/res/values-it/strings.xml
  11. 2
      app/src/main/res/values-ja/strings.xml
  12. 2
      app/src/main/res/values-pt/strings.xml
  13. 2
      app/src/main/res/values-ru/strings.xml
  14. 2
      app/src/main/res/values-zh/strings.xml
  15. 2
      app/src/main/res/values/strings.xml
  16. 15
      app/src/test/java/net/pokeranalytics/android/BasicUnitTest.kt
  17. 5
      app/standard/release/output.json

@ -9,6 +9,7 @@ apply plugin: 'com.google.gms.google-services' // Crashlytics
repositories {
maven { url 'https://maven.fabric.io/public' }
maven { url 'https://jitpack.io' } // required for MPAndroidChart
jcenter() // for kotlin serialization
}
android {
@ -34,7 +35,7 @@ android {
minSdkVersion 23
targetSdkVersion 28
versionCode 85
versionName "3.0(b1)"
versionName "3.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@ -95,6 +96,7 @@ dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0") // JVM dependency
// Android
implementation 'androidx.appcompat:appcompat:1.0.2'
@ -103,12 +105,6 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
implementation 'com.google.code.gson:gson:2.8.6'
// Places
implementation 'com.google.android.libraries.places:places:1.1.0'

@ -1,80 +0,0 @@
package net.pokeranalytics.android.api
import android.content.Context
import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.retrofit.CurrencyConverterValue
import net.pokeranalytics.android.util.URL
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.GET
import retrofit2.http.Query
import java.util.concurrent.TimeUnit
/**
* CurrencyCode Converter API
*/
interface CurrencyConverterApi {
companion object {
private var currencyConverterApi: CurrencyConverterApi? = null
fun getApi(context: Context): CurrencyConverterApi? {
if (currencyConverterApi == null) {
val serviceEndpoint = URL.API_CURRENCY_CONVERTER
val httpClient = OkHttpClient.Builder()
// Logging interceptor
if (BuildConfig.DEBUG) {
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BASIC
httpClient.addInterceptor(interceptor)
}
// Add headers
val interceptor = Interceptor { chain ->
val original = chain.request()
val originalHttpUrl = original.url()
val url = originalHttpUrl.newBuilder()
.addQueryParameter("apiKey", context.getString(R.string.currency_converter_api))
.build()
val requestBuilder = original.newBuilder()
.url(url)
chain.proceed(requestBuilder.build())
}
httpClient.addInterceptor(interceptor)
val client = httpClient
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build()
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(serviceEndpoint.value)
.client(client)
.build()
currencyConverterApi = retrofit.create(CurrencyConverterApi::class.java)
}
return currencyConverterApi
}
}
@GET("convert")
fun convert(@Query("q") currencies: String, @Query("compact") compact: String = "ultra"): Call<Map<String, CurrencyConverterValue>>
}

@ -0,0 +1,51 @@
package net.pokeranalytics.android.api
import android.content.Context
import android.util.JsonReader
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.VolleyError
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration
import timber.log.Timber
class FreeConverterApi {
companion object {
fun currencyRate(pair: String, context: Context, callback: (Double) -> (Unit)) {
val queue = Volley.newRequestQueue(context)
val url = "https://free.currconv.com/api/v7/convert?q=${pair}&compact=ultra&apiKey=5ba8d38995282fe8b1c8"
// https://free.currconv.com/api/v7/convert?q=GBP_USD&compact=ultra&apiKey=5ba8d38995282fe8b1c8
// { "USD_PHP": 44.1105, "PHP_USD": 0.0227 }
val stringRequest = StringRequest(
Request.Method.GET, url,
Response.Listener { response ->
val json = Json(JsonConfiguration.Stable)
val f = json.parseJson(response)
f.jsonObject[pair]?.primitive?.double?.let { rate ->
callback(rate)
} ?: run {
Timber.d("no rate: $response")
}
},
Response.ErrorListener {
Timber.d("Api call failed: ${it.message}")
})
queue.add(stringRequest)
}
}
}

@ -6,9 +6,8 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import net.pokeranalytics.android.R
import net.pokeranalytics.android.api.CurrencyConverterApi
import net.pokeranalytics.android.api.FreeConverterApi
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.retrofit.CurrencyConverterValue
import net.pokeranalytics.android.ui.activity.CurrenciesActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
@ -24,13 +23,9 @@ import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.UserDefaults
import net.pokeranalytics.android.util.extensions.toCurrency
import net.pokeranalytics.android.util.extensions.toRate
import retrofit2.Call
import retrofit2.Response
import timber.log.Timber
import java.util.*
/**
* Custom EditableDataFragment to manage the Bankroll data
*/
@ -219,31 +214,38 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
this.lastRefreshRateCall = System.currentTimeMillis()
val currenciesConverterValue = "${bankroll.currency?.code}_${defaultCurrency.currencyCode}"
val call = CurrencyConverterApi.getApi(requireContext())?.convert(currenciesConverterValue)
call?.enqueue(object : retrofit2.Callback<Map<String, CurrencyConverterValue>> {
override fun onResponse(call: Call<Map<String, CurrencyConverterValue>>, response: Response<Map<String, CurrencyConverterValue>>) {
response.body()?.let {
it[currenciesConverterValue]?.value?.let { rate ->
Timber.d("rate found = $rate")
onRowValueChanged(rate, BankrollRow.RATE)
} ?: run {
Timber.d("no rate for $currenciesConverterValue")
}
} ?: run {
Timber.d("onResponse> no body in ${response}")
}
isRefreshingRate = false
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
FreeConverterApi.currencyRate(currenciesConverterValue, requireContext()) { rate ->
onRowValueChanged(rate, BankrollRow.RATE)
isRefreshingRate = false
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
override fun onFailure(call: Call<Map<String, CurrencyConverterValue>>, t: Throwable) {
Timber.d("api call failed: ${t.message}")
isRefreshingRate = false
rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
}
})
// val call = CurrencyConverterApi.getApi(requireContext())?.convert(currenciesConverterValue)
// call?.enqueue(object : retrofit2.Callback<Map<String, CurrencyConverterValue>> {
//
// override fun onResponse(call: Call<Map<String, CurrencyConverterValue>>, response: Response<Map<String, CurrencyConverterValue>>) {
// response.body()?.let {
// it[currenciesConverterValue]?.value?.let { rate ->
// Timber.d("rate found = $rate")
// onRowValueChanged(rate, BankrollRow.RATE)
// } ?: run {
// Timber.d("no rate for $currenciesConverterValue")
// }
// } ?: run {
// Timber.d("onResponse> no body in ${response}")
// }
//
// isRefreshingRate = false
// rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
// }
//
// override fun onFailure(call: Call<Map<String, CurrencyConverterValue>>, t: Throwable) {
// Timber.d("api call failed: ${t.message}")
// isRefreshingRate = false
// rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)
// }
// })
this.isRefreshingRate = true
this.rowRepresentableAdapter.refreshRow(BankrollRow.REFRESH_RATE)

@ -11,6 +11,7 @@ import kotlinx.android.synthetic.main.fragment_editable_data.*
import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -87,10 +88,16 @@ open class EditableDataFragment : DataManagerFragment(), RowRepresentableDelegat
val liveDataType = this.model.liveDataType
val proxyItem: RealmModel? =
liveDataType.getData(this.getRealm(), this.model.primaryKey)
proxyItem?.let {
this.appBar.toolbar.title = liveDataType.updateEntityLocalizedTitle(requireContext())
val data: RealmModel? = liveDataType.getData(this.getRealm(), this.model.primaryKey)
data?.let {
val title = if (it is NameManageable) {
it.name
} else {
liveDataType.updateEntityLocalizedTitle(requireContext())
}
this.appBar.toolbar.title = title
deleteButtonShouldAppear = true
isUpdating = true
} ?: run {

@ -37,7 +37,7 @@
<string name="progress">Fortschritt</string>
<string name="save_report">Bericht speichern</string>
<string name="import_confirmation">Wollen Sie mit dem Import der Datei fortfahren?</string>
<string formatted="false" name="update_entity">%s aktualisieren</string>
<string name="update_entity">%s aktualisieren</string>
<string name="comparison_chart">Vergleichsübersicht</string>
<string name="filter_currently_selected">Der Filter kann nicht gelöscht werden, weil er derzeit ausgewählt ist.</string>
<string name="custom_field">Benutzerdefiniertes Feld</string>

@ -25,7 +25,7 @@
<string name="progress">Progreso</string>
<string name="save_report">Guardar reporte</string>
<string name="import_confirmation">¿Deseas continuar con la importación del archivo?</string>
<string formatted="false" name="update_entity">Actualizar %s</string>
<string name="update_entity">Actualizar %s</string>
<string name="comparison_chart">Gráfica comparativa</string>
<string name="filter_currently_selected">El filtro no puede ser eliminado porque está seleccionado actualmente.</string>
<string name="custom_field">Campo personalizado</string>

@ -54,7 +54,7 @@
<string name="new_tournament_name">Nouveau nom de tournoi</string>
<string name="new_tournament_feature">Nouvelle propriété de tournoi</string>
<string name="new_filter">Nouveau filtre</string>
<string name="update_entity" formatted="false">Mise-à-jour %s</string>
<string name="update_entity">Mise-à-jour %s</string>
<!-- Not translated -->
<!-- <string name="address">Adresse</string>-->

@ -25,7 +25,7 @@
<string name="progress">रगति</string>
<string name="save_report">िट सह</string>
<string name="import_confirmation"> आप फइल इमट करनथ आग बढहत?</string>
<string formatted="false" name="update_entity">अपडट %s</string>
<string name="update_entity">अपडट %s</string>
<string name="comparison_chart">लन</string>
<string name="filter_currently_selected">िटर हट नह सकति वरतमन म इसआ ह.</string>
<string name="custom_field">कसटम फ</string>

@ -25,7 +25,7 @@
<string name="progress">Storico</string>
<string name="save_report">Salva report</string>
<string name="import_confirmation">Procedere con l\'importazione del file?</string>
<string formatted="false" name="update_entity">Aggiorna %s</string>
<string name="update_entity">Aggiorna %s</string>
<string name="comparison_chart">Grafica comparativa</string>
<string name="filter_currently_selected">Il filtro non può essere eliminato, perché è al momento selezionato.</string>
<string name="custom_field">Campo personalizzato</string>

@ -25,7 +25,7 @@
<string name="progress">進捗</string>
<string name="save_report">レポートを保存する</string>
<string name="import_confirmation">ファイルのインポートを続行しますか?</string>
<string formatted="false" name="update_entity">%sを更新する</string>
<string name="update_entity">%sを更新する</string>
<string name="comparison_chart">比較チャート</string>
<string name="filter_currently_selected">フィルターは現在選択中のため削除できません。</string>
<string name="custom_field">カスタムフィールド</string>

@ -25,7 +25,7 @@
<string name="progress">Progresso</string>
<string name="save_report">Salvar relatório</string>
<string name="import_confirmation">Deseja continuar com a importação do arquivo?</string>
<string formatted="false" name="update_entity">Atualizar %s</string>
<string name="update_entity">Atualizar %s</string>
<string name="comparison_chart">Tabela de comparação</string>
<string name="filter_currently_selected">O filtro não pode ser excluído porque está selecionado no momento.</string>
<string name="custom_field">Campo personalizado</string>

@ -25,7 +25,7 @@
<string name="progress">Исполнение</string>
<string name="save_report">Сохранить отчет</string>
<string name="import_confirmation">Хотите продолжить импорт файла?</string>
<string formatted="false" name="update_entity">Обновление %s</string>
<string name="update_entity">Обновление %s</string>
<string name="comparison_chart">Сравнительная диаграмма</string>
<string name="filter_currently_selected">Фильтр не может быть удален, так как он выбран в данный момент.</string>
<string name="custom_field">Пользовательское поле</string>

@ -25,7 +25,7 @@
<string name="progress">进度</string>
<string name="save_report">保存报告</string>
<string name="import_confirmation">要继续导入文件吗?</string>
<string formatted="false" name="update_entity">更新%s</string>
<string name="update_entity">更新%s</string>
<string name="comparison_chart">比较图表</string>
<string name="filter_currently_selected">无法删除该筛选条件,因为它目前已被选取。</string>
<string name="custom_field">自定义字段</string>

@ -37,7 +37,7 @@
<string name="progress">Progress</string>
<string name="save_report">Save Report</string>
<string name="import_confirmation">Do you want to proceed with the file import?</string>
<string name="update_entity" formatted="false">Update %s</string>
<string name="update_entity">Update %s</string>
<string name="comparison_chart">Comparison chart</string>
<string name="filter_currently_selected">The filter cannot be deleted because it is currently selected.</string>
<string name="custom_field">Custom field</string>

@ -1,8 +1,9 @@
package net.pokeranalytics.android
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration
import net.pokeranalytics.android.util.CSVNumberFormat
import net.pokeranalytics.android.util.Parser
import net.pokeranalytics.android.util.extensions.formatted
import net.pokeranalytics.android.util.extensions.kmbFormatted
import org.junit.Assert
import org.junit.Test
@ -66,4 +67,16 @@ class BasicUnitTest : RealmUnitTest() {
Assert.assertEquals("1000", str2)
}
@Test
fun testDeserialization() {
val json = Json(JsonConfiguration.Stable)
val f = json.parseJson("""{"a":42}""")
val v = f.jsonObject["a"]?.primitive?.int
Assert.assertEquals(true, f.contains("a"))
Assert.assertEquals(false, f.contains("b"))
Assert.assertEquals(42, v)
}
}

@ -1,5 +0,0 @@
<<<<<<< HEAD
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":79,"versionName":"3.0","enabled":true,"outputFile":"PokerAnalytics_3.0(79)_200428_1456_release.apk","fullName":"standardRelease","baseName":"standard-release","dirName":""},"path":"PokerAnalytics_3.0(79)_200428_1456_release.apk","properties":{}}]
=======
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":84,"versionName":"2.4.3","enabled":true,"outputFile":"PokerAnalytics_2.4.3(84)_200526_1106_release.apk","fullName":"standardRelease","baseName":"standard-release","dirName":""},"path":"PokerAnalytics_2.4.3(84)_200526_1106_release.apk","properties":{}}]
>>>>>>> master
Loading…
Cancel
Save