View Issue Details

IDProjectCategoryView StatusLast Update
0010738Talerwallet (Android App)public2026-01-07 16:23
Reportersebasjm Assigned Toavalos  
PrioritynormalSeverityminorReproducibilityhave not tried
Status resolvedResolutionfixed 
Product Version1.0 
Target Version1.4 
Summary0010738: enable http for dev mode
DescriptionI can't test android with my local kyc setup.

my current workaround is installing self-signed certificated on android

also nigthly crashed trying to do it and withdrawal screen failed with no error message
TagsNo tags attached.
Attached Files
Error in Taler Wallet Nightly a57c3c1c6bdb.txt (7,692 bytes)   
type: crash
osVersion: google/tegu/tegu:16/BP3A.251105.015/2025112101:user/release-keys
flags: dev options enabled
package: net.taler.wallet.nightly:1764869068, targetSdk 36
process: net.taler.wallet.nightly
processUptime: 4751 + 553 ms
installer: com.android.packageinstaller

java.util.NoSuchElementException: List is empty.
	at kotlin.collections.CollectionsKt.first(Unknown Source:10)
	at net.taler.wallet.withdraw.PromptWithdrawFragment.onCreateView$lambda$0$2(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:88)
	at net.taler.wallet.withdraw.PromptWithdrawFragment.$r8$lambda$KjdVN9_hyGsTy-QmjFSy1a3vNDo(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:1)
	at androidx.compose.material3.ButtonKt$$ExternalSyntheticLambda3.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:50)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:10)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:1)
	at androidx.compose.ui.platform.ComposeView.Content(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:67)
	at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:28)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:10)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:1)
	at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:46)
	at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:297)
	at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:32)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:10)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:1)
	at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:46)
	at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:586)
	at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:32)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:10)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:1)
	at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:84)
	at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:178)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:10)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:1)
	at androidx.compose.runtime.internal.Expect_jvmKt.invokeComposable(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:15)
	at androidx.compose.runtime.ComposerImpl.doCompose-aFTiNEg(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:95)
	at androidx.compose.runtime.CompositionImpl.composeContent(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:37)
	at androidx.compose.runtime.Recomposer.composeInitial$runtime(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:60)
	at androidx.compose.runtime.CompositionImpl.setContent(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:32)
	at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:57)
	at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:7)
	at androidx.compose.ui.platform.WrappedComposition.setContent(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:8)
	at androidx.compose.ui.platform.WrappedComposition.onStateChanged(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:19)
	at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:24)
	at androidx.lifecycle.LifecycleRegistry.sync(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:343)
	at androidx.lifecycle.LifecycleRegistry.moveToState(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:139)
	at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:15)
	at androidx.fragment.app.FragmentViewLifecycleOwner.handleLifecycleEvent(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:3)
	at androidx.fragment.app.Fragment.restoreViewState(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:31)
	at androidx.fragment.app.Fragment.performActivityCreated(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:62)
	at androidx.fragment.app.FragmentStateManager.activityCreated(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:42)
	at androidx.fragment.app.FragmentStateManager.moveToExpectedState(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:164)
	at androidx.fragment.app.FragmentManager.executeOpsTogether(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:1129)
	at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:92)
	at androidx.fragment.app.FragmentManager.execPendingActions(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:172)
	at androidx.fragment.app.FragmentManager$5.run(r8-map-id-f36a4100b5657bb6f7a99b9f322a16539af344183d20537a217410a57c38b454:4)
	at android.os.Handler.handleCallback(Handler.java:1041)
	at android.os.Handler.dispatchMessage(Handler.java:103)
	at android.os.Looper.dispatchMessage(Looper.java:315)
	at android.os.Looper.loopOnce(Looper.java:251)
	at android.os.Looper.loop(Looper.java:349)
	at android.app.ActivityThread.main(ActivityThread.java:9085)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
	at com.android.internal.os.ExecInit.main(ExecInit.java:50)
	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:371)

Activities

sebasjm

2025-12-23 20:36

developer   ~0027178

note that the workaround requires to compile the android from source which is also not nice.

we need to support http for dev, otherwise debugging or testing against local environment (to test different deployment) is infeasible

avalos

2026-01-07 16:23

developer   ~0027205

It seems like it's not possible to toggle insecure HTTP in runtime, but what I can do is either
a) enable it for all wallets, regardless of dev mode, or
b) only enable it for nightly and debug builds.

I personally think (b) makes more sense, so that's what I just did:

commit ec34c9ab65358840cad4e959dca9e6e2aa2b6352
Author: Iván Ávalos <avalos@disroot.org>
Date: Wed Jan 7 16:18:38 2026 +0100

    [wallet] fix 0010738 (insecure http)

Let me know if you prefer (a), feel free to reopen.

Issue History

Date Modified Username Field Change
2025-12-05 16:40 sebasjm New Issue
2025-12-05 16:40 sebasjm File Added: Error in Taler Wallet Nightly a57c3c1c6bdb.txt
2025-12-05 20:48 Christian Grothoff Assigned To => avalos
2025-12-05 20:48 Christian Grothoff Status new => assigned
2025-12-05 20:48 Christian Grothoff Product Version => 1.0
2025-12-05 20:48 Christian Grothoff Target Version => 1.4
2025-12-23 20:36 sebasjm Note Added: 0027178
2026-01-07 16:23 avalos Note Added: 0027205
2026-01-07 16:23 avalos Status assigned => resolved
2026-01-07 16:23 avalos Resolution open => fixed