Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
cf15500
feat(keepkey): Phase 1 transport layer and account model
pastaghost May 20, 2026
ff72923
feat(keepkey): add proto sources from device-protocol@d637b78
pastaghost May 20, 2026
de17cf3
feat(keepkey): Phase 1 UI layer — connect flow, UFVK encoding, DI wiring
pastaghost May 20, 2026
fb0b391
fix(keepkey): resolve all build errors from KeepKeyAccount sealed-sub…
pastaghost May 20, 2026
62b15c2
feat(transport): add USB permission request flow (ZA-14)
pastaghost May 20, 2026
2a20738
feat(repository): add KeepKeyProposalRepository (ZA-31 to ZA-42)
pastaghost May 20, 2026
97af2e1
feat(ui): add SignKeepKeyTransaction screen + nav wiring (ZA-57–62)
pastaghost May 20, 2026
2b69615
ZA-64: wire KeepKey into send-flow proposal use cases
pastaghost May 20, 2026
2809ac1
ZA-47–52, ZA-63: KeepKey birthday sub-screens and account setup nav
pastaghost May 20, 2026
69d145f
ZA-61, ZA-65: extend disconnect screen and mark quick wins done
pastaghost May 20, 2026
f9a74f7
ZA-66: extract HID framing into testable module, add unit tests
pastaghost May 20, 2026
17a7ec0
ZA-67: extract signing protocol, add unit tests with fake transport
pastaghost May 20, 2026
5bd3dab
ZA-68: fix error display bug in SignKeepKeyTransactionVM, add Blake2b…
pastaghost May 20, 2026
5babb7d
ZA-70: add emulator HTTP transport and FVK integration tests
pastaghost May 20, 2026
1e5d986
ZA-71: extend signing protocol with per-action data, add emulator sig…
pastaghost May 20, 2026
fcef24e
ZA-69: Compose UI tests for connect and signing screens
pastaghost May 20, 2026
24ddc85
ZA-53-56: add selectkeepkeyaccount screen and split ConnectKeepKeyUse…
pastaghost May 20, 2026
12d712e
ZA-74: fix detekt and ktlint CI failures
pastaghost May 21, 2026
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
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-feature android:name="android.hardware.usb.host" android:required="false" />

<application
android:name="co.electriccoin.zcash.app.ZcashApplication"
android:allowBackup="true"
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/xml/keepkey_device_filter.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- KeepKey hardware wallet: VID 0x2B24, PID 0x0001 -->
<usb-device vendor-id="11044" product-id="1" />
</resources>
2 changes: 2 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,8 @@ ZIP_321_VERSION = 1.0.2
KTOR_VERSION =3.4.0
# WARNING: Ensure a non-snapshot version is used before releasing to production
ZCASH_BIP39_VERSION=1.0.9
PROTOBUF_GRADLE_PLUGIN_VERSION=0.9.4
PROTOBUF_VERSION=4.28.2
# WARNING: Ensure a non-snapshot version is used before releasing to production
ZCASH_SDK_VERSION=2.5.0-SNAPSHOT

Expand Down
4 changes: 4 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ pluginManagement {
kotlin("jvm") version (kotlinVersion) apply false
kotlin("multiplatform") version (kotlinVersion) apply false
kotlin("plugin.serialization") version (kotlinVersion) apply false
id("com.google.protobuf") version (extra["PROTOBUF_GRADLE_PLUGIN_VERSION"].toString()) apply false
}
}

Expand Down Expand Up @@ -206,6 +207,7 @@ dependencyResolutionManagement {
val keystoneVersion = extra["KEYSTONE_VERSION"].toString()
val shimmerVersion = extra["SHIMMER_VERSION"].toString()
val ktorVersion = extra["KTOR_VERSION"].toString()
val protobufVersion = extra["PROTOBUF_VERSION"].toString()

// Standalone versions
version("flank", flankVersion)
Expand Down Expand Up @@ -281,6 +283,8 @@ dependencyResolutionManagement {
library("ktor-negotiation", "io.ktor" ,"ktor-client-content-negotiation").withoutVersion()
library("ktor-json", "io.ktor" ,"ktor-serialization-kotlinx-json").withoutVersion()
library("ktor-logging", "io.ktor" ,"ktor-client-logging").withoutVersion()
library("protobuf-kotlin-lite", "com.google.protobuf:protobuf-kotlin-lite:$protobufVersion")
library("protobuf-protoc", "com.google.protobuf:protoc:$protobufVersion")

// Test libraries
library("androidx-compose-test-junit", "androidx.compose.ui:ui-test-junit4:$androidxComposeVersion")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportWidth="40"
android:viewportHeight="40">
<!-- Slightly lighter background for night mode -->
<path
android:pathData="M0,20C0,8.954 8.954,0 20,0C31.046,0 40,8.954 40,20C40,31.046 31.046,40 20,40C8.954,40 0,31.046 0,20Z"
android:fillColor="#252545"/>
<!-- Stylised "K" shape representing KeepKey -->
<path
android:pathData="M12,10L16,10L16,19L23,10L28,10L20,20L28,30L23,30L16,21L16,30L12,30Z"
android:fillColor="#F7931A"/>
</vector>
14 changes: 14 additions & 0 deletions ui-design-lib/src/main/res/ui/common/drawable/ic_item_keepkey.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportWidth="40"
android:viewportHeight="40">
<!-- Dark background circle -->
<path
android:pathData="M0,20C0,8.954 8.954,0 20,0C31.046,0 40,8.954 40,20C40,31.046 31.046,40 20,40C8.954,40 0,31.046 0,20Z"
android:fillColor="#1A1A2E"/>
<!-- Stylised "K" shape representing KeepKey -->
<path
android:pathData="M12,10L16,10L16,19L23,10L28,10L20,20L28,30L23,30L16,21L16,30L12,30Z"
android:fillColor="#F7931A"/>
</vector>
21 changes: 21 additions & 0 deletions ui-lib/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ plugins {
id("wtf.emulator.gradle")
id("secant.emulator-wtf-conventions")
id("secant.jacoco-conventions")
id("com.google.protobuf")
}

android {
Expand Down Expand Up @@ -90,6 +91,7 @@ android {
"src/main/res/ui/whats_new",
"src/main/res/ui/exchange_rate",
"src/main/res/ui/tor",
"src/main/res/ui/keepkey",
)
)
}
Expand Down Expand Up @@ -165,6 +167,24 @@ androidComponents {
}
}

protobuf {
protoc {
artifact = libs.protobuf.protoc.get().toString()
}
generateProtoTasks {
all().forEach { task ->
task.builtins {
create("java") {
option("lite")
}
create("kotlin") {
option("lite")
}
}
}
}
}

dependencies {
implementation(libs.accompanist.permissions)
implementation(libs.androidx.activity)
Expand Down Expand Up @@ -213,6 +233,7 @@ dependencies {
api(libs.bundles.androidx.biometric)

api(libs.keystone)
implementation(libs.protobuf.kotlin.lite)

testImplementation(libs.kotlin.test)
testImplementation("io.ktor:ktor-client-mock")
Expand Down
Loading
Loading