View Issue Details

IDProjectCategoryView StatusLast Update
0010738Talerwallet (Android App)public2026-02-04 19:00
Reportersebasjm Assigned Toavalos Resolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicator 
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version1.0 
Target Version1.4Fixed in 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)

Required notifications

Address or linkRemarkAdded byNotifiedActions

Activities

sebasjm

2025-12-23 19: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 15: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 ModifiedUsernameFieldChange
2025-12-05 15:40sebasjmNew Issue
2025-12-05 15:40sebasjmFile Added: Error in Taler Wallet Nightly a57c3c1c6bdb.txt
2025-12-05 19:48Christian GrothoffAssigned To => avalos
2025-12-05 19:48Christian GrothoffStatusnew => assigned
2025-12-05 19:48Christian GrothoffProduct Version => 1.0
2025-12-05 19:48Christian GrothoffTarget Version => 1.4
2025-12-23 19:36sebasjmNote Added: 0027178
2026-01-07 15:23avalosNote Added: 0027205
2026-01-07 15:23avalosStatusassigned => informing
2026-01-07 15:23avalosResolutionopen => fixed
2026-01-14 05:47Christian GrothoffFixed in Version => 1.4
2026-02-04 19:00Christian GrothoffStatusinforming => closed