cfd8359d1612

test: Cover Quick Settings tile copy target (v2.3.52)

- Extract the most-recent password selection rule from the QS tile - Add JVM coverage for recent-password and empty-target behavior - Document remaining on-device QS tile QA

time
2026-06-26 14:21 UTC · 4 months ago
machine
koh2
parent
629eb924b636
3 files app/build.gradle+2 −2app/src/main/java/com/peachpasswords/qs/PeachTileService.kt+7 −3app/src/test/java/com/peachpasswords/qs/PeachTileServiceTest.kt+35 −0
app/build.gradle+2 −2
@@ -16,8 +16,8 @@1616         applicationId "com.peachpasswords"1717         minSdk 261818         targetSdk 3519-        versionCode 23510020-        versionName "2.3.51"19+        versionCode 23520020+        versionName "2.3.52"2121 2222         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"2323         vectorDrawables {

view file

app/src/main/java/com/peachpasswords/qs/PeachTileService.kt+7 −3
@@ -9,6 +9,7 @@99 import android.widget.Toast1010 import com.peachpasswords.MainActivity1111 import com.peachpasswords.R12+import com.peachpasswords.vault.VaultEntry1213 import com.peachpasswords.vault.VaultRepository1314 import dagger.hilt.android.AndroidEntryPoint1415 import javax.inject.Inject@@ -32,9 +33,7 @@3233     override fun onClick() {3334         super.onClick()3435         if (vault.isUnlocked.value) {35-            val recent = vault.entries.value36-                .filter { !it.password.isNullOrEmpty() }37-                .maxByOrNull { it.lastUsedAt ?: it.modifiedAt }36+            val recent = mostRecentPasswordEntry(vault.entries.value)3837             if (recent?.password != null) {3938                 copyToClipboard(recent.title, recent.password!!)4039                 Toast.makeText(this, "Copied ${recent.title} password", Toast.LENGTH_SHORT).show()@@ -80,3 +79,8 @@8079         tile.updateTile()8180     }8281 }82+83+internal fun mostRecentPasswordEntry(entries: List<VaultEntry>): VaultEntry? =84+    entries85+        .filter { !it.password.isNullOrEmpty() }86+        .maxByOrNull { it.lastUsedAt ?: it.modifiedAt }

view file

app/src/test/java/com/peachpasswords/qs/PeachTileServiceTest.kt+35 −0
@@ -0,0 +1,35 @@1+package com.peachpasswords.qs2+3+import com.peachpasswords.vault.VaultEntry4+import org.junit.Assert.assertEquals5+import org.junit.Assert.assertNull6+import org.junit.Test7+8+class PeachTileServiceTest {9+    @Test fun tile_copies_most_recent_password_entry() {10+        val old = entry("old", password = "old-pw", modifiedAt = 10L, lastUsedAt = 20L)11+        val newest = entry("new", password = "new-pw", modifiedAt = 100L, lastUsedAt = null)12+        val used = entry("used", password = "used-pw", modifiedAt = 5L, lastUsedAt = 200L)13+        val noPassword = entry("note", password = null, modifiedAt = 1_000L, lastUsedAt = 1_000L)14+15+        assertEquals(used, mostRecentPasswordEntry(listOf(old, newest, used, noPassword)))16+    }17+18+    @Test fun tile_has_no_copy_target_without_password_entries() {19+        assertNull(mostRecentPasswordEntry(listOf(entry("note", password = null, modifiedAt = 1L))))20+    }21+22+    private fun entry(23+        id: String,24+        password: String?,25+        modifiedAt: Long,26+        lastUsedAt: Long? = null,27+    ) = VaultEntry(28+        id = id,29+        title = id,30+        password = password,31+        createdAt = 1L,32+        modifiedAt = modifiedAt,33+        lastUsedAt = lastUsedAt,34+    )35+}

view file