Bump targetSdk and compileSdk to 30.

This commit is contained in:
Severiano Jaramillo 2022-05-29 20:28:57 -07:00
parent f302c1346f
commit ec54ed0620
7 changed files with 30 additions and 28 deletions

View file

@ -7,11 +7,12 @@ apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'com.google.firebase.crashlytics'
android { android {
compileSdkVersion 29 compileSdk 30
defaultConfig { defaultConfig {
applicationId "cy.agorise.bitsybitshareswallet" applicationId "cy.agorise.bitsybitshareswallet"
minSdkVersion 21 minSdk 21
targetSdkVersion 29 targetSdk 30
versionCode 15 versionCode 15
versionName "0.17.2-beta" versionName "0.17.2-beta"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@ -55,10 +56,6 @@ android {
kotlinOptions { kotlinOptions {
jvmTarget = "1.8" jvmTarget = "1.8"
} }
// Gradle automatically adds 'android.test.runner' as a dependency.
useLibrary 'android.test.runner'
useLibrary 'android.test.base'
useLibrary 'android.test.mock'
} }
dependencies { dependencies {

View file

@ -342,7 +342,7 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestio
try { try {
mMap?.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(lat, lon), 15f)) mMap?.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(lat, lon), 15f))
} catch (e: Exception) { } catch (e: Exception) {
Log.d(TAG, e.message) Log.d(TAG, e.message ?: "onSuggestionClick unknown error")
} }
} }

View file

@ -3,7 +3,6 @@ package cy.agorise.bitsybitshareswallet.models.coingecko
import com.google.gson.JsonDeserializationContext import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement import com.google.gson.JsonElement
import junit.framework.Assert
import java.lang.reflect.Type import java.lang.reflect.Type
class MarketDataDeserializer : JsonDeserializer<MarketData> { class MarketDataDeserializer : JsonDeserializer<MarketData> {

View file

@ -14,14 +14,14 @@ import cy.agorise.graphenej.stats.ExponentialMovingAverage
* The basic idea here is to keep track of the sequence of activity life cycle callbacks so that we * The basic idea here is to keep track of the sequence of activity life cycle callbacks so that we
* can infer when the user has left the app and the node connection can be salfely shut down. * can infer when the user has left the app and the node connection can be salfely shut down.
*/ */
class NetworkServiceManager(nodes: List<String>) : class NetworkServiceManager(nodes: List<String>) : ActivityLifecycleCallbacks {
ActivityLifecycleCallbacks {
/** /**
* Handler instance used to schedule tasks back to the main thread * Handler instance used to schedule tasks back to the main thread
*/ */
private val mHandler = Handler() private val mHandler = Handler()
private var mNetworkService: NetworkService? = null private var mNetworkService: NetworkService? = null
private val mNodeUrls: Array<String> = nodes.toTypedArray() private val mNodeUrls: Array<String> = nodes.toTypedArray()
/** /**
* Runnable used to schedule a service disconnection once the app is not visible to the user for * Runnable used to schedule a service disconnection once the app is not visible to the user for
* more than DISCONNECT_DELAY milliseconds. * more than DISCONNECT_DELAY milliseconds.
@ -33,9 +33,25 @@ class NetworkServiceManager(nodes: List<String>) :
} }
} }
fun onApplicationCreated() {
startService()
}
override fun onActivityCreated(activity: Activity, bundle: Bundle?) {} override fun onActivityCreated(activity: Activity, bundle: Bundle?) {}
override fun onActivityStarted(activity: Activity) {} override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity?) { override fun onActivityResumed(activity: Activity) {
startService()
}
override fun onActivityPaused(activity: Activity) {
mHandler.postDelayed(mDisconnectRunnable, DISCONNECT_DELAY)
}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
private fun startService() {
mHandler.removeCallbacks(mDisconnectRunnable) mHandler.removeCallbacks(mDisconnectRunnable)
if (mNetworkService == null) { if (mNetworkService == null) {
mNetworkService = NetworkService.getInstance() mNetworkService = NetworkService.getInstance()
@ -43,17 +59,6 @@ class NetworkServiceManager(nodes: List<String>) :
} }
} }
override fun onActivityPaused(activity: Activity) {
mHandler.postDelayed(
mDisconnectRunnable,
DISCONNECT_DELAY.toLong()
)
}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
companion object { companion object {
/** /**
* Constant used to specify how long will the app wait for another activity to go through its starting life * Constant used to specify how long will the app wait for another activity to go through its starting life
@ -61,7 +66,7 @@ class NetworkServiceManager(nodes: List<String>) :
* *
* This is used as a means to detect whether or not the user has left the app. * This is used as a means to detect whether or not the user has left the app.
*/ */
private const val DISCONNECT_DELAY = 1500 private const val DISCONNECT_DELAY = 1500L
} }
} }

View file

@ -33,7 +33,7 @@ class BitsyApplication : Application() {
// Add RxJava error handler to avoid crashes when an error occurs on a RxJava operation, but still log the // Add RxJava error handler to avoid crashes when an error occurs on a RxJava operation, but still log the
// exception to Crashlytics so that we can fix the issues // exception to Crashlytics so that we can fix the issues
RxJavaPlugins.setErrorHandler { throwable -> RxJavaPlugins.setErrorHandler { throwable ->
Log.e("RxJava Error", throwable.message) Log.e("RxJava Error", throwable.message ?: "Unknown RxJava error")
FirebaseCrashlytics.getInstance().recordException(throwable) FirebaseCrashlytics.getInstance().recordException(throwable)
} }
@ -61,7 +61,8 @@ class BitsyApplication : Application() {
// Fake call to onActivityResumed, because BiTSy is using a single activity and at the moment // Fake call to onActivityResumed, because BiTSy is using a single activity and at the moment
// onActivityResumed is called the first time the app starts, the NetworkServiceManager has not // onActivityResumed is called the first time the app starts, the NetworkServiceManager has not
// been configured yet, thus causing the NetworkService to never connect. // been configured yet, thus causing the NetworkService to never connect.
networkManager.onActivityResumed(null) // TODO try using ProcessLifecycleObserver
networkManager.onApplicationCreated()
} }
override fun onTerminate() { override fun onTerminate() {

View file

@ -44,7 +44,7 @@ class ReceiveTransactionViewModel(application: Application) : AndroidViewModel(a
try { try {
_qrCodeBitmap.value = encodeAsBitmap(Invoice.toQrCode(invoice), "#139657", size) // PalmPay green _qrCodeBitmap.value = encodeAsBitmap(Invoice.toQrCode(invoice), "#139657", size) // PalmPay green
} catch (e: Exception) { } catch (e: Exception) {
Log.d("ReceiveTransactionVM", e.message) Log.d("ReceiveTransactionVM", e.message ?: "Unknown error in updateInvoice")
} }
} }
} }

View file

@ -12,7 +12,7 @@ class MarketDataDeserializerTest {
val str = "{\"current_price\": {\"aed\": 0.14139359620401012,\"ars\": 1.476552955052185,\"aud\": 0.05410080634896981,\"bch\": 0.0003021370317928406,\"bdt\": 3.2298217535732276,\"bhd\": 0.01451147244444769,\"bmd\": 0.03849350092032233,\"bnb\": 0.007113127493734956,\"brl\": 0.15000509277539803,\"btc\": 0.00001043269732289735,\"cad\": 0.051866143140042266,\"chf\": 0.03825734329217614,\"clp\": 26.587581916766037,\"cny\": 0.2652895096426772,\"czk\": 0.8706365729081245,\"dkk\": 0.25236393094264586,\"eos\": 0.01566778197589746,\"eth\": 0.0003870069548974383,\"eur\": 0.033804376612212375,\"gbp\": 0.030484350651335475,\"hkd\": 0.3012660745118239,\"huf\": 10.909058160819312,\"idr\": 558.1942568455942,\"ils\": 0.14452962323048843,\"inr\": 2.721290348862006,\"jpy\": 4.327150672205728,\"krw\": 43.47379006939362,\"kwd\": 0.011703102097803801,\"lkr\": 6.939897047172613,\"ltc\": 0.0013225337650442446,\"mmk\": 60.56217136246436,\"mxn\": 0.7738105980956592,\"myr\": 0.1608450935955668,\"nok\": 0.335428517669597,\"nzd\": 0.056803550529088344,\"php\": 2.046274976098886,\"pkr\": 5.3730315641051885,\"pln\": 0.1449376543402434,\"rub\": 2.596498268228413,\"sar\": 0.1444545609036934,\"sek\": 0.3498212376637053,\"sgd\": 0.05281188996415366,\"thb\": 1.2598922851221481,\"try\": 0.20393883733037357,\"twd\": 1.1869880579631216,\"usd\": 0.03849350092032233,\"vef\": 9565.159285292651,\"xag\": 0.002632124388265174,\"xau\": 0.00003094261577979185,\"xdr\": 0.02769368731511483,\"xlm\": 0.3411570542267162,\"xrp\": 0.11074614753363282,\"zar\": 0.5534635980499906}}" val str = "{\"current_price\": {\"aed\": 0.14139359620401012,\"ars\": 1.476552955052185,\"aud\": 0.05410080634896981,\"bch\": 0.0003021370317928406,\"bdt\": 3.2298217535732276,\"bhd\": 0.01451147244444769,\"bmd\": 0.03849350092032233,\"bnb\": 0.007113127493734956,\"brl\": 0.15000509277539803,\"btc\": 0.00001043269732289735,\"cad\": 0.051866143140042266,\"chf\": 0.03825734329217614,\"clp\": 26.587581916766037,\"cny\": 0.2652895096426772,\"czk\": 0.8706365729081245,\"dkk\": 0.25236393094264586,\"eos\": 0.01566778197589746,\"eth\": 0.0003870069548974383,\"eur\": 0.033804376612212375,\"gbp\": 0.030484350651335475,\"hkd\": 0.3012660745118239,\"huf\": 10.909058160819312,\"idr\": 558.1942568455942,\"ils\": 0.14452962323048843,\"inr\": 2.721290348862006,\"jpy\": 4.327150672205728,\"krw\": 43.47379006939362,\"kwd\": 0.011703102097803801,\"lkr\": 6.939897047172613,\"ltc\": 0.0013225337650442446,\"mmk\": 60.56217136246436,\"mxn\": 0.7738105980956592,\"myr\": 0.1608450935955668,\"nok\": 0.335428517669597,\"nzd\": 0.056803550529088344,\"php\": 2.046274976098886,\"pkr\": 5.3730315641051885,\"pln\": 0.1449376543402434,\"rub\": 2.596498268228413,\"sar\": 0.1444545609036934,\"sek\": 0.3498212376637053,\"sgd\": 0.05281188996415366,\"thb\": 1.2598922851221481,\"try\": 0.20393883733037357,\"twd\": 1.1869880579631216,\"usd\": 0.03849350092032233,\"vef\": 9565.159285292651,\"xag\": 0.002632124388265174,\"xau\": 0.00003094261577979185,\"xdr\": 0.02769368731511483,\"xlm\": 0.3411570542267162,\"xrp\": 0.11074614753363282,\"zar\": 0.5534635980499906}}"
val gson = GsonBuilder().registerTypeAdapter(MarketData::class.java, MarketDataDeserializer()) val gson = GsonBuilder().registerTypeAdapter(MarketData::class.java, MarketDataDeserializer())
.create() .create()
val marketData = gson.fromJson<MarketData>(str, MarketData::class.java) val marketData = gson.fromJson(str, MarketData::class.java)
Assert.assertEquals(0.03849350092032233, marketData.current_price["usd"]) Assert.assertEquals(0.03849350092032233, marketData.current_price["usd"])
Assert.assertEquals(0.033804376612212375, marketData.current_price["eur"]) Assert.assertEquals(0.033804376612212375, marketData.current_price["eur"])
} }