Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
a746d3d
Merge pull request #53 from gruntsoftware/release/v4.4.1
kcw-grunt Mar 30, 2025
ba8ea45
Revert "Updated the APIManager"
kcw-grunt Mar 31, 2025
638ce3a
Reverted the Kotlin APIManager.
kcw-grunt Mar 31, 2025
5344a96
Add version and code to welcome screen
kcw-grunt Mar 31, 2025
ebc3bb9
reset padding
kcw-grunt Mar 31, 2025
03c68b8
Merge pull request #56 from gruntsoftware/feature/add-version-issue-108
kcw-grunt Apr 1, 2025
c770f01
Revert "Updated the APIManager"
kcw-grunt Mar 31, 2025
f8c1bd5
Reverted the Kotlin APIManager.
kcw-grunt Mar 31, 2025
ff58b57
fix: fix crash when FragmentSignal dismissed
andhikayuana Apr 4, 2025
d64ea93
fix: fix sync after wipe
andhikayuana Apr 7, 2025
277f387
Merge branch 'hotfix/api-manager-fix' of https://github.com/brainwall…
kcw-grunt Apr 7, 2025
9a8a20f
fix: fix wrong lifecycle to trigger callback at FragmentSignal
andhikayuana Apr 7, 2025
832fa36
Update issue templates
kcw-grunt Apr 8, 2025
b294cd6
updated core changes
kcw-grunt Apr 8, 2025
4ed8af3
Merge pull request #57 from gruntsoftware/hotfix/api-manager-fix
kcw-grunt Apr 8, 2025
089995a
Rename .java to .kt
andhikayuana Apr 11, 2025
7e85987
chore: refactor BRApiManager & APIClient
andhikayuana Apr 11, 2025
0aa41e7
chore: remove unused part at APIClient
andhikayuana Apr 14, 2025
0cc29cb
feat: wip new peer discovery
andhikayuana Apr 14, 2025
54d2d9e
feat: implement selected peer ip address from cache (fetched from API)
andhikayuana Apr 14, 2025
c6923b1
feat: implement selected peer ip address from cache (fetched from API)
andhikayuana Apr 14, 2025
ef4e6d2
feat: filter out peers with NODE_NETWORK, NODE_BLOOM
andhikayuana Apr 15, 2025
2336939
fix: race condition when clear shared prefs values after wipeAll
andhikayuana Apr 16, 2025
51a4d9a
Merge pull request #62 from gruntsoftware/hotfix/prefs-race-condition
kcw-grunt Apr 16, 2025
62afb9d
Merge pull request #61 from gruntsoftware/feat/new-peer-discovery
kcw-grunt Apr 16, 2025
391e319
Updating the core library
kcw-grunt Apr 16, 2025
836b6f0
Chore/revert pre peer discovery (Android) (#69)
andhikayuana Apr 25, 2025
3caa1a7
feat: remove unused activity (ImportActivity) at AndroidManifest.xml …
andhikayuana Apr 29, 2025
a324444
fix: fix crash IllegalStateException: cannot make a new request becau…
andhikayuana May 2, 2025
1f9c5d0
code bump
kcw-grunt May 2, 2025
7ca17d3
Feat/move tx fee (#74)
andhikayuana May 5, 2025
e7fb2b7
fix: fix dismiss allow state loss (#76)
andhikayuana May 7, 2025
3d8ef98
fix: fix typo at strings.xml (#75)
andhikayuana May 7, 2025
25be1a8
feat: new UI for receive and topup flow (moonpay integration) (#72)
andhikayuana May 12, 2025
18eda46
version and code bump
kcw-grunt May 12, 2025
dbb6a5f
Added support url (#81)
kcw-grunt May 19, 2025
c82a5e3
version and code bump
kcw-grunt May 19, 2025
2981ec6
Revert from eda0f532 & cherry pick (#86)
andhikayuana May 25, 2025
c161fed
build bump
kcw-grunt May 25, 2025
63d7494
chore: open bread activity first then open moonpay widget (#88)
andhikayuana May 26, 2025
f09eb28
Adjustment for circleci (#89)
andhikayuana May 29, 2025
47c69cd
fix: android: Footer version label is obfuscated (#92)
andhikayuana May 29, 2025
a9c4a63
fix: You saved it right screen reset button covers words (#93)
andhikayuana May 29, 2025
d8f08ad
tiny resizing (#94)
kcw-grunt May 29, 2025
ef93585
code and version bump
kcw-grunt May 29, 2025
174d612
change break (#97)
kcw-grunt May 30, 2025
a4521d7
build code number
andhikayuana May 31, 2025
6fec1e2
fix: [#137] fix: Reset fiat options in Buy / Receive modal (#99)
andhikayuana Jun 2, 2025
c8fdf8d
Chore/update device data (#100)
kcw-grunt Jun 2, 2025
3f646df
Add agent string obfuscation (#103)
kcw-grunt Jun 14, 2025
642f9e6
updated metadata (#105)
kcw-grunt Jun 24, 2025
50f44de
chore: remove screen lock detection (#106)
andhikayuana Jun 24, 2025
ea15423
🧰 Fx/seed words UI polish (#108)
kcw-grunt Jun 25, 2025
5b6dff3
❇️ Feat/add polish punjabi farsi (#109)
kcw-grunt Jun 27, 2025
4ff50b8
fix: fix YourSeedProveItState.isWordUsedCorrectly (#111)
andhikayuana Jun 29, 2025
2fd094f
Upgrade targetSdk 36 (#113)
andhikayuana Aug 5, 2025
0b502c9
bump
kcw-grunt Aug 6, 2025
baf6ebd
Update pro-guard-rules
kcw-grunt Aug 6, 2025
e4530be
Merge branch 'main' into release/v4.7.0
kcw-grunt Aug 6, 2025
2f12ea9
Updated the version
kcw-grunt Aug 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion app/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,11 @@ include_directories(src/main/secp/secp256k1/src/)
include_directories(src/main/secp/secp256k1/)
include_directories(src/main/secp/)

# support compiling 16 KB-aligned: https://developer.android.com/guide/practices/page-sizes#cmake
target_link_options(core-lib PRIVATE "-Wl,-z,max-page-size=16384")

# add lib dependencies
target_link_libraries(
core-lib
android
log)
log)
8 changes: 4 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ val localProperties = gradleLocalProperties(rootDir, providers)

android {
namespace = "com.brainwallet"
compileSdk = 34
compileSdk = 36

defaultConfig {
applicationId = "ltd.grunt.brainwallet"
minSdk = 29
targetSdk = 34
versionCode = 202506291
versionName = "4.6.2"
targetSdk = 36
versionCode = 202506293
versionName = "v4.7.0"

multiDexEnabled = true
base.archivesName.set("${defaultConfig.versionName}(${defaultConfig.versionCode})")
Expand Down
2 changes: 1 addition & 1 deletion app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
-dontwarn org.slf4j.impl.StaticLoggerBinder
-dontwarn org.slf4j.impl.StaticMDCBinder
-dontwarn org.slf4j.impl.StaticMarkerBinder

-dontwarn java.lang.reflect.AnnotatedType

-keepclasseswithmembernames class * {
native <methods>;
Expand Down
5 changes: 3 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,16 @@
tools:ignore="GoogleAppIndexingWarning,UnusedAttribute"
tools:replace="android:fullBackupContent,android:allowBackup">

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />

<!-- Main Compose Activity -->
<activity
android:name=".ui.BrainwalletActivity"
android:exported="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize">
<intent-filter android:autoVerify="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Expand Down
5 changes: 0 additions & 5 deletions app/src/main/java/com/brainwallet/BrainwalletApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@ import com.brainwallet.tools.listeners.SyncReceiver
import com.brainwallet.tools.manager.AnalyticsManager
import com.brainwallet.tools.util.BRConstants
import com.brainwallet.tools.util.Utils
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.analytics.setConsent
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.google.firebase.ktx.Firebase
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.GlobalContext.startKoin
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/java/com/brainwallet/di/Module.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ import com.brainwallet.ui.screens.yourseedwords.YourSeedWordsViewModel
import com.brainwallet.util.cryptography.KeyStoreKeyGenerator
import com.brainwallet.util.cryptography.KeyStoreManager
import com.brainwallet.worker.CurrencyUpdateWorker
import com.google.firebase.ktx.Firebase
import com.google.firebase.remoteconfig.ktx.remoteConfig
import com.google.firebase.Firebase
import com.google.firebase.remoteconfig.remoteConfig
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
Expand All @@ -35,7 +35,6 @@ import org.koin.core.component.inject
import org.koin.core.module.dsl.viewModel
import org.koin.core.module.dsl.viewModelOf
import org.koin.dsl.module
import retrofit2.HttpException
import retrofit2.Retrofit
import retrofit2.converter.kotlinx.serialization.asConverterFactory

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.core.net.toUri
import com.brainwallet.BuildConfig
import com.brainwallet.R
import com.brainwallet.data.repository.LtcRepository
import com.brainwallet.data.source.RemoteApiSource
import com.brainwallet.di.getKoinInstance
import com.brainwallet.presenter.activities.BreadActivity
import com.brainwallet.ui.BrainwalletActivity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package com.brainwallet.ui.screens.buylitecoin

import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.provider.Settings.Global.putString
import android.widget.Toast
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
Expand Down Expand Up @@ -39,7 +35,6 @@ import com.brainwallet.ui.composable.LargeButton
import com.brainwallet.ui.composable.LoadingDialog
import com.brainwallet.ui.screens.home.receive.ReceiveDialogEvent
import com.brainwallet.ui.theme.BrainwalletTheme
import com.google.firebase.analytics.FirebaseAnalytics
import org.koin.compose.koinInject

//TODO: wip
Expand All @@ -52,10 +47,6 @@ fun BuyLitecoinScreen(
val loadingState by viewModel.loadingState.collectAsState()
val appSetting by viewModel.appSetting.collectAsState()
val context = LocalContext.current
val firebaseAnalytics = FirebaseAnalytics.getInstance(LocalContext.current)
val bundle = Bundle().apply {
putString("buy_tapped_location", "buy_litecoin_screen")
}
LaunchedEffect(Unit) {
viewModel.onEvent(BuyLitecoinEvent.OnLoad(context))
viewModel.uiEffect.collect { effect ->
Expand Down Expand Up @@ -158,9 +149,7 @@ fun BuyLitecoinScreen(
enabled = loadingState.visible.not(),
onClick = {
//open bread activity first then open moonpay widget
// Needs Refactor: This causes crashes ruining the UX
// LegacyNavigation.restartBreadActivity(context)

LegacyNavigation.restartBreadActivity(context)
LegacyNavigation.showMoonPayWidget(
context = context,
params = mapOf(
Expand All @@ -170,7 +159,6 @@ fun BuyLitecoinScreen(
"walletAddress" to state.address
)
)
firebaseAnalytics.logEvent("will_show_mp_widget", bundle)
}
) {
Text(stringResource(R.string.buy_litecoin_button_moonpay))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ import com.brainwallet.ui.composable.WheelPickerFocusVertical
import com.brainwallet.ui.composable.rememberWheelPickerState
import com.brainwallet.ui.theme.BrainwalletAppTheme
import com.brainwallet.ui.theme.BrainwalletTheme
import com.google.firebase.analytics.FirebaseAnalytics
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.debounce
Expand All @@ -91,10 +90,6 @@ fun ReceiveDialog(
val appSetting by viewModel.appSetting.collectAsState()
val context = LocalContext.current
val wheelPickerFiatCurrencyState = rememberWheelPickerState(0)
val firebaseAnalytics = FirebaseAnalytics.getInstance(LocalContext.current)
val bundle = Bundle().apply {
putString("buy_tapped_location", "buy_receive_dialog")
}
LaunchedEffect(Unit) {
viewModel.onEvent(ReceiveDialogEvent.OnLoad(context))
viewModel.uiEffect.collect { effect ->
Expand Down Expand Up @@ -384,7 +379,6 @@ fun ReceiveDialog(
),
isDarkMode = appSetting.isDarkMode
)
firebaseAnalytics.logEvent("will_show_mp_widget", bundle)
onDismissRequest.invoke()
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
Expand Down Expand Up @@ -93,39 +96,44 @@ fun WelcomeScreen(
modifier = Modifier
.fillMaxSize()
.background(BrainwalletTheme.colors.surface)
.verticalScroll(rememberScrollState()),
.verticalScroll(rememberScrollState())
.padding(WindowInsets.systemBars.asPaddingValues()),
) {
Image(
painterResource(R.drawable.brainwallet_logotype_white),
contentDescription = "brainwallet_logotype_white",
contentScale = ContentScale.Fit,
colorFilter = ColorFilter.tint(
BrainwalletTheme.colors.content,
),
Column(
modifier = Modifier
.align(Alignment.TopCenter)
.fillMaxWidth()
.padding(horizontal = 55.dp)
.padding(vertical = 30.dp)
)
.padding(vertical = 20.dp)
) {
Image(
painterResource(R.drawable.brainwallet_logotype_white),
contentDescription = "brainwallet_logotype_white",
contentScale = ContentScale.Fit,
colorFilter = ColorFilter.tint(
BrainwalletTheme.colors.content,
),
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 55.dp)
)

// Animation Placeholder
LottieAnimation(
modifier = Modifier
.fillMaxWidth()
.padding(leadTrailPadding.dp)
.background(
BrainwalletTheme.colors.surface,
BrainwalletTheme.shapes.large
)
.height(thirdOfScreenHeight.dp)
.clip(BrainwalletTheme.shapes.large),
composition = composition,
contentScale = ContentScale.FillWidth,
alignment = Alignment.Center,
progress = { progress }
)
}

// Animation Placeholder
LottieAnimation(
modifier = Modifier
.offset(y = 120.dp)
.fillMaxWidth()
.padding(leadTrailPadding.dp)
.background(
BrainwalletTheme.colors.surface,
BrainwalletTheme.shapes.large
)
.height(thirdOfScreenHeight.dp)
.clip(BrainwalletTheme.shapes.large),
composition = composition,
contentScale = ContentScale.FillWidth,
alignment = Alignment.Center,
progress = { progress }
)

Column(
modifier = Modifier.align(Alignment.BottomCenter),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,10 @@ fun YourSeedProveItScreen(

)
if (text.toString() == expectedWord) {
clickAudioPlayer.start() // success sound
clickAudioPlayer.start() // Success sound
}
else {
errorAudioPlayer.start() // error sound
errorAudioPlayer.start() // Success sound
}
return true
}
Expand Down Expand Up @@ -231,9 +231,7 @@ fun YourSeedProveItScreen(
LargeButton(
onClick = {
if (state.orderCorrected) {
//onNavigate.invoke(UiEffect.Navigate(Route.))
viewModel.onEvent(YourSeedProveItEvent.OnGameAndSync)
AnalyticsManager.logCustomEvent(BRConstants._20250303_DSTU)
onNavigate.invoke(UiEffect.Navigate(Route.TopUp))
} else {
viewModel.onEvent(YourSeedProveItEvent.OnClear)
}
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading