Skip to content

Commit a87dd1c

Browse files
committed
Update to API 34.
Update gradle. Update to Kotlin 1.9. Update dependencies. Switch from Gson to kotlinx serialization. Remove Bitcambio, Wyre, Zbg. Fixes for Bybit, Coinsbit, Poloniex Added Hashkey. Add auto search for coin selection screen. Improve coin/currency pair generation code.
1 parent 45094f6 commit a87dd1c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+950
-658
lines changed

.idea/compiler.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/jarRepositories.xml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/kotlinc.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bitcoin/build.gradle

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,21 @@
11
plugins {
22
id 'com.android.application'
33
id 'kotlin-android'
4-
id 'kotlin-parcelize'
5-
id 'kotlin-kapt'
4+
id 'com.google.devtools.ksp'
65
id 'org.jetbrains.kotlin.android'
6+
id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.0'
77
}
88

99
android {
10-
compileSdk 33
10+
compileSdk 34
1111

1212
defaultConfig {
1313
applicationId "com.brentpanther.bitcoinwidget"
1414
minSdk 23
15-
targetSdk 33
16-
versionCode 318
17-
versionName "8.3.8"
15+
targetSdk 34
16+
versionCode 319
17+
versionName "8.4.0"
1818

19-
javaCompileOptions {
20-
annotationProcessorOptions {
21-
arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
22-
}
23-
}
2419
}
2520

2621
buildFeatures {
@@ -37,20 +32,16 @@ android {
3732
}
3833
}
3934

40-
testOptions {
41-
unitTests.returnDefaultValues = true
42-
}
43-
4435
kotlinOptions {
45-
jvmTarget = "11"
36+
jvmTarget = "17"
4637
}
4738
compileOptions {
48-
sourceCompatibility JavaVersion.VERSION_11
49-
targetCompatibility JavaVersion.VERSION_11
39+
sourceCompatibility JavaVersion.VERSION_17
40+
targetCompatibility JavaVersion.VERSION_17
5041
}
5142

5243
sourceSets.test.resources.srcDirs += ["src/main/res"]
53-
flavorDimensions 'distribution'
44+
flavorDimensions = ['distribution']
5445
productFlavors {
5546
playstore {
5647
dimension 'distribution'
@@ -63,40 +54,37 @@ android {
6354
composeOptions {
6455
kotlinCompilerExtensionVersion compose_compiler_version
6556
}
66-
packagingOptions {
67-
resources {
68-
excludes += '/META-INF/{AL2.0,LGPL2.1}'
69-
}
70-
}
57+
}
7158

59+
ksp {
60+
arg "room.schemaLocation", "$projectDir/schemas"
7261
}
7362

7463
dependencies {
75-
implementation platform('androidx.compose:compose-bom:2023.04.00')
64+
implementation platform('androidx.compose:compose-bom:2023.08.00')
7665

77-
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
78-
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
79-
implementation 'com.google.code.gson:gson:2.10.1'
80-
implementation 'com.google.android.material:material:1.8.0'
81-
implementation 'androidx.preference:preference-ktx:1.2.0'
66+
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3'
67+
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0"
68+
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
69+
implementation 'androidx.preference:preference-ktx:1.2.1'
8270
implementation 'androidx.work:work-runtime-ktx:2.8.1'
83-
implementation 'androidx.activity:activity-compose:1.7.0'
71+
implementation 'androidx.activity:activity-ktx:1.8.0-alpha07'
72+
implementation 'androidx.activity:activity-compose:1.7.2'
8473
implementation "androidx.compose.ui:ui"
8574
implementation "androidx.compose.ui:ui-tooling-preview"
8675
implementation 'androidx.compose.material:material'
8776
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1"
88-
implementation 'androidx.navigation:navigation-compose:2.5.3'
89-
implementation "io.coil-kt:coil-compose:2.3.0"
90-
implementation 'androidx.core:core-ktx:1.9.0'
77+
implementation 'androidx.navigation:navigation-compose:2.7.1'
78+
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
79+
implementation 'io.coil-kt:coil-compose:2.4.0'
80+
implementation 'androidx.core:core-ktx:1.10.1'
9181
testImplementation 'junit:junit:4.13.2'
9282
testImplementation 'com.jayway.jsonpath:json-path:2.8.0'
93-
androidTestImplementation "androidx.compose.ui:ui-test-junit4:"
94-
debugImplementation "androidx.compose.ui:ui-tooling:"
95-
debugImplementation "androidx.compose.ui:ui-test-manifest:"
83+
debugImplementation "androidx.compose.ui:ui-tooling"
9684

97-
def room_version = "2.5.1"
85+
def room_version = "2.5.2"
9886

87+
ksp "androidx.room:room-compiler:$room_version"
9988
implementation "androidx.room:room-runtime:$room_version"
100-
kapt "androidx.room:room-compiler:$room_version"
10189
implementation "androidx.room:room-ktx:$room_version"
10290
}

bitcoin/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
android:networkSecurityConfig="@xml/network_security_config"
2222
android:supportsRtl="true"
2323
android:theme="@style/Theme.MyApp"
24+
android:enableOnBackInvokedCallback="true"
2425
tools:ignore="DataExtractionRules,GoogleAppIndexingWarning"
25-
tools:targetApi="q">
26+
tools:targetApi="tiramisu">
2627
<activity
2728
android:name=".ui.MainActivity"
2829
android:exported="true"

bitcoin/src/main/java/com/brentpanther/bitcoinwidget/Coin.kt

Lines changed: 146 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,154 @@
11
package com.brentpanther.bitcoinwidget
22

33
import android.os.Build
4-
import android.os.Parcelable
5-
import com.brentpanther.bitcoinwidget.R.drawable.*
4+
import com.brentpanther.bitcoinwidget.R.drawable.ic_1inch
5+
import com.brentpanther.bitcoinwidget.R.drawable.ic_aave
6+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ada
7+
import com.brentpanther.bitcoinwidget.R.drawable.ic_algo
8+
import com.brentpanther.bitcoinwidget.R.drawable.ic_algo_white
9+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ape
10+
import com.brentpanther.bitcoinwidget.R.drawable.ic_arrr
11+
import com.brentpanther.bitcoinwidget.R.drawable.ic_atom
12+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ava
13+
import com.brentpanther.bitcoinwidget.R.drawable.ic_avax
14+
import com.brentpanther.bitcoinwidget.R.drawable.ic_avax_dark
15+
import com.brentpanther.bitcoinwidget.R.drawable.ic_axs
16+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bal
17+
import com.brentpanther.bitcoinwidget.R.drawable.ic_band_color
18+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bat
19+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bcd
20+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bcd_white
21+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bch
22+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bch_dark
23+
import com.brentpanther.bitcoinwidget.R.drawable.ic_best
24+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bnb
25+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bnt
26+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bsv
27+
import com.brentpanther.bitcoinwidget.R.drawable.ic_bsv_dark
28+
import com.brentpanther.bitcoinwidget.R.drawable.ic_btc
29+
import com.brentpanther.bitcoinwidget.R.drawable.ic_btc_dark
30+
import com.brentpanther.bitcoinwidget.R.drawable.ic_btg
31+
import com.brentpanther.bitcoinwidget.R.drawable.ic_btg_dark
32+
import com.brentpanther.bitcoinwidget.R.drawable.ic_btm
33+
import com.brentpanther.bitcoinwidget.R.drawable.ic_btm_gray
34+
import com.brentpanther.bitcoinwidget.R.drawable.ic_btt
35+
import com.brentpanther.bitcoinwidget.R.drawable.ic_cel
36+
import com.brentpanther.bitcoinwidget.R.drawable.ic_chz
37+
import com.brentpanther.bitcoinwidget.R.drawable.ic_comp_black
38+
import com.brentpanther.bitcoinwidget.R.drawable.ic_comp_white
39+
import com.brentpanther.bitcoinwidget.R.drawable.ic_cro
40+
import com.brentpanther.bitcoinwidget.R.drawable.ic_cro_white
41+
import com.brentpanther.bitcoinwidget.R.drawable.ic_crv
42+
import com.brentpanther.bitcoinwidget.R.drawable.ic_cube_black
43+
import com.brentpanther.bitcoinwidget.R.drawable.ic_cube_white
44+
import com.brentpanther.bitcoinwidget.R.drawable.ic_dai_color
45+
import com.brentpanther.bitcoinwidget.R.drawable.ic_dash
46+
import com.brentpanther.bitcoinwidget.R.drawable.ic_dash_dark
47+
import com.brentpanther.bitcoinwidget.R.drawable.ic_dcr
48+
import com.brentpanther.bitcoinwidget.R.drawable.ic_doge
49+
import com.brentpanther.bitcoinwidget.R.drawable.ic_dot_black
50+
import com.brentpanther.bitcoinwidget.R.drawable.ic_dot_white
51+
import com.brentpanther.bitcoinwidget.R.drawable.ic_egld_dark
52+
import com.brentpanther.bitcoinwidget.R.drawable.ic_egld_white
53+
import com.brentpanther.bitcoinwidget.R.drawable.ic_enj
54+
import com.brentpanther.bitcoinwidget.R.drawable.ic_eos_black
55+
import com.brentpanther.bitcoinwidget.R.drawable.ic_eos_white
56+
import com.brentpanther.bitcoinwidget.R.drawable.ic_etc
57+
import com.brentpanther.bitcoinwidget.R.drawable.ic_eth
58+
import com.brentpanther.bitcoinwidget.R.drawable.ic_fil
59+
import com.brentpanther.bitcoinwidget.R.drawable.ic_firo
60+
import com.brentpanther.bitcoinwidget.R.drawable.ic_firo_dark
61+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ftm
62+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ftt
63+
import com.brentpanther.bitcoinwidget.R.drawable.ic_gala
64+
import com.brentpanther.bitcoinwidget.R.drawable.ic_gala_white
65+
import com.brentpanther.bitcoinwidget.R.drawable.ic_gno_color
66+
import com.brentpanther.bitcoinwidget.R.drawable.ic_gnt_blue
67+
import com.brentpanther.bitcoinwidget.R.drawable.ic_grin_color_black
68+
import com.brentpanther.bitcoinwidget.R.drawable.ic_grt
69+
import com.brentpanther.bitcoinwidget.R.drawable.ic_hbar
70+
import com.brentpanther.bitcoinwidget.R.drawable.ic_hbar_white
71+
import com.brentpanther.bitcoinwidget.R.drawable.ic_hns
72+
import com.brentpanther.bitcoinwidget.R.drawable.ic_hns_dark
73+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ht
74+
import com.brentpanther.bitcoinwidget.R.drawable.ic_icx
75+
import com.brentpanther.bitcoinwidget.R.drawable.ic_iota
76+
import com.brentpanther.bitcoinwidget.R.drawable.ic_iota_white
77+
import com.brentpanther.bitcoinwidget.R.drawable.ic_kava
78+
import com.brentpanther.bitcoinwidget.R.drawable.ic_kmd
79+
import com.brentpanther.bitcoinwidget.R.drawable.ic_knc_color
80+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ksm_black
81+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ksm_white
82+
import com.brentpanther.bitcoinwidget.R.drawable.ic_leo
83+
import com.brentpanther.bitcoinwidget.R.drawable.ic_link
84+
import com.brentpanther.bitcoinwidget.R.drawable.ic_lrc
85+
import com.brentpanther.bitcoinwidget.R.drawable.ic_lsk
86+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ltc
87+
import com.brentpanther.bitcoinwidget.R.drawable.ic_lto
88+
import com.brentpanther.bitcoinwidget.R.drawable.ic_luna
89+
import com.brentpanther.bitcoinwidget.R.drawable.ic_lunc
90+
import com.brentpanther.bitcoinwidget.R.drawable.ic_mana
91+
import com.brentpanther.bitcoinwidget.R.drawable.ic_matic
92+
import com.brentpanther.bitcoinwidget.R.drawable.ic_mco
93+
import com.brentpanther.bitcoinwidget.R.drawable.ic_mco_white
94+
import com.brentpanther.bitcoinwidget.R.drawable.ic_mkr
95+
import com.brentpanther.bitcoinwidget.R.drawable.ic_mln
96+
import com.brentpanther.bitcoinwidget.R.drawable.ic_nano
97+
import com.brentpanther.bitcoinwidget.R.drawable.ic_near_black
98+
import com.brentpanther.bitcoinwidget.R.drawable.ic_near_white
99+
import com.brentpanther.bitcoinwidget.R.drawable.ic_neo
100+
import com.brentpanther.bitcoinwidget.R.drawable.ic_nrg
101+
import com.brentpanther.bitcoinwidget.R.drawable.ic_okb
102+
import com.brentpanther.bitcoinwidget.R.drawable.ic_omg
103+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ont
104+
import com.brentpanther.bitcoinwidget.R.drawable.ic_pax
105+
import com.brentpanther.bitcoinwidget.R.drawable.ic_paxg_color
106+
import com.brentpanther.bitcoinwidget.R.drawable.ic_placeholder
107+
import com.brentpanther.bitcoinwidget.R.drawable.ic_powr_color
108+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ppc
109+
import com.brentpanther.bitcoinwidget.R.drawable.ic_qtum
110+
import com.brentpanther.bitcoinwidget.R.drawable.ic_rdd
111+
import com.brentpanther.bitcoinwidget.R.drawable.ic_ren
112+
import com.brentpanther.bitcoinwidget.R.drawable.ic_rep
113+
import com.brentpanther.bitcoinwidget.R.drawable.ic_rune
114+
import com.brentpanther.bitcoinwidget.R.drawable.ic_rvn
115+
import com.brentpanther.bitcoinwidget.R.drawable.ic_sand
116+
import com.brentpanther.bitcoinwidget.R.drawable.ic_shib
117+
import com.brentpanther.bitcoinwidget.R.drawable.ic_snx
118+
import com.brentpanther.bitcoinwidget.R.drawable.ic_sol
119+
import com.brentpanther.bitcoinwidget.R.drawable.ic_storj
120+
import com.brentpanther.bitcoinwidget.R.drawable.ic_sushi
121+
import com.brentpanther.bitcoinwidget.R.drawable.ic_theta
122+
import com.brentpanther.bitcoinwidget.R.drawable.ic_trx
123+
import com.brentpanther.bitcoinwidget.R.drawable.ic_uma
124+
import com.brentpanther.bitcoinwidget.R.drawable.ic_uni
125+
import com.brentpanther.bitcoinwidget.R.drawable.ic_vet
126+
import com.brentpanther.bitcoinwidget.R.drawable.ic_vtc
127+
import com.brentpanther.bitcoinwidget.R.drawable.ic_waves
128+
import com.brentpanther.bitcoinwidget.R.drawable.ic_wbtc
129+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xaut_color
130+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xem
131+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xem_dark_gray
132+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xlm
133+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xlm_white
134+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xmr
135+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xmr_dark
136+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xrp_black
137+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xrp_white
138+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xtz
139+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xvg
140+
import com.brentpanther.bitcoinwidget.R.drawable.ic_xym
141+
import com.brentpanther.bitcoinwidget.R.drawable.ic_yfi
142+
import com.brentpanther.bitcoinwidget.R.drawable.ic_zec
143+
import com.brentpanther.bitcoinwidget.R.drawable.ic_zec_dark
144+
import com.brentpanther.bitcoinwidget.R.drawable.ic_zil
145+
import com.brentpanther.bitcoinwidget.R.drawable.ic_zrx_black
146+
import com.brentpanther.bitcoinwidget.R.drawable.ic_zrx_white
6147
import com.brentpanther.bitcoinwidget.Theme.SOLID
7148
import com.brentpanther.bitcoinwidget.Theme.TRANSPARENT
8-
import kotlinx.parcelize.Parcelize
9-
import java.util.*
149+
import java.util.SortedSet
10150

11-
@Parcelize
12-
enum class Coin(val coinName: String, val coinGeckoId: String, private vararg val themes: IconTheme) : Parcelable {
151+
enum class Coin(val coinName: String, val coinGeckoId: String, private vararg val themes: IconTheme) {
13152

14153
CUSTOM("Custom", "", IconTheme(SOLID, ic_placeholder)),
15154
ONE_INCH("1inch", "1inch", IconTheme(SOLID, ic_1inch)),
@@ -172,5 +311,4 @@ enum class Coin(val coinName: String, val coinGeckoId: String, private vararg va
172311

173312
}
174313

175-
@Parcelize
176-
class CoinUnit(val text: String, val amount: Double) : Parcelable
314+
class CoinUnit(val text: String, val amount: Double)

bitcoin/src/main/java/com/brentpanther/bitcoinwidget/Enums.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ package com.brentpanther.bitcoinwidget
22

33
import android.content.Context
44
import android.content.res.Configuration
5-
import android.os.Parcelable
65
import androidx.annotation.DrawableRes
76
import androidx.annotation.LayoutRes
87
import androidx.annotation.StringRes
9-
import kotlinx.parcelize.Parcelize
108

11-
@Parcelize
129
enum class Theme(@LayoutRes val lightPrice: Int, @LayoutRes val darkPrice: Int,
13-
@LayoutRes val lightValue: Int, @LayoutRes val darkValue: Int) : Parcelable {
10+
@LayoutRes val lightValue: Int, @LayoutRes val darkValue: Int) {
1411

1512
SOLID(R.layout.widget_price_solid_light, R.layout.widget_price_solid_dark,
1613
R.layout.widget_value_solid_light, R.layout.widget_value_solid_dark),
@@ -29,9 +26,8 @@ enum class Theme(@LayoutRes val lightPrice: Int, @LayoutRes val darkPrice: Int,
2926
}
3027
}
3128

32-
@Parcelize
3329
data class IconTheme(val theme: Theme, @DrawableRes val light: Int,
34-
@DrawableRes val dark: Int = light) : Parcelable
30+
@DrawableRes val dark: Int = light)
3531

3632
enum class NightMode {
3733
LIGHT,

bitcoin/src/main/java/com/brentpanther/bitcoinwidget/Repository.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import com.brentpanther.bitcoinwidget.db.Widget
1010
import com.brentpanther.bitcoinwidget.exchange.CustomExchangeData
1111
import com.brentpanther.bitcoinwidget.exchange.ExchangeData
1212
import com.brentpanther.bitcoinwidget.exchange.ExchangeHelper
13-
import com.google.gson.JsonParseException
13+
import kotlinx.serialization.SerializationException
1414
import okhttp3.ConnectionPool
1515
import okhttp3.OkHttpClient
1616
import okhttp3.Request
@@ -23,8 +23,8 @@ import java.util.concurrent.TimeUnit
2323

2424
object Repository {
2525

26-
internal const val LAST_MODIFIED = "last_modified"
27-
const val CURRENCY_FILE_NAME = "coins.json"
26+
private const val LAST_MODIFIED = "last_modified"
27+
private const val CURRENCY_FILE_NAME = "coins.json"
2828
private val TAG = Repository::class.java.simpleName
2929

3030
fun downloadJSON() {
@@ -98,11 +98,11 @@ object Repository {
9898
} else {
9999
val data = ExchangeData(widget.coin, getJson(context))
100100
if (data.numberExchanges == 0) {
101-
throw JsonParseException("No exchanges found.")
101+
throw SerializationException("No exchanges found.")
102102
}
103103
data
104104
}
105-
} catch(e: JsonParseException) {
105+
} catch(e: SerializationException) {
106106
Log.e("SettingsViewModel", "Error parsing JSON file, falling back to original.", e)
107107
context.deleteFile(CURRENCY_FILE_NAME)
108108
PreferenceManager.getDefaultSharedPreferences(context).edit {

0 commit comments

Comments
 (0)