Re-shoot the phone screenshots, and fix what taking them exposed
The phone set was two days old and predated M16-M20: nothing in it showed the copy-to picker, the trash's window or the compress dialog. It is now eight shots (Play's maximum) taken from the signed release build over the demo library: home, folder list, photo grid, storage usage, sort sheet, Copy to..., the trash with its 24-hour line and Empty trash, and the compress dialog with its switch. The shots have to stay inside the demo library, so two things were deliberately not captured: the home screen (its library counts are the real phone's - the old AVD-shot file is kept) and the picker one level down (it would name real folders). The picker is shot at the volume list instead. Taking the picker shot exposed a real bug: it listed '.plainfiles-trash' among the destinations, because unlike every other listing it did not filter hidden entries. Hidden folders are now offered only when the listing shows hidden files, with a test for both halves. The tablet sets are unchanged. The tablet AVDs cannot boot on this machine (no KVM) and the phone-resized path needs more navigation work than this session had left; the checklist says so and records what to regenerate and where.
This commit is contained in:
@@ -622,7 +622,10 @@ class BrowserViewModel(
|
||||
} else {
|
||||
runCatching { source.list(path) }.getOrDefault(emptyList())
|
||||
}
|
||||
entries.filter { it.isDirectory }
|
||||
// Folders only, and hidden ones only when the listing shows hidden files: the picker is a
|
||||
// listing, and a `.plainfiles-trash` or a `.thumbnails` folder in a copy dialog is an
|
||||
// invitation to put a file somewhere it will never be seen again.
|
||||
entries.filter { it.isDirectory && (_state.value.showHidden || !it.isHidden) }
|
||||
.sortedWith(SortSpec().comparator)
|
||||
.map { PickerFolder(path = it.path) }
|
||||
}
|
||||
|
||||
@@ -311,6 +311,26 @@ class BrowserViewModelTest {
|
||||
assertEquals(R.string.browser_internal_storage, crumb.labelRes)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `the picker leaves hidden folders out until they are asked for`() {
|
||||
storage.addDirectory(root.child(".hidden-backup"))
|
||||
val model = viewModel()
|
||||
model.openDirectory(downloads)
|
||||
model.toggleSelection(downloads.child("a.txt"))
|
||||
|
||||
model.startTransferTo(cut = false)
|
||||
model.pickerOpen(root)
|
||||
|
||||
// A copy dialog is a listing: the trash folder and a `.thumbnails` folder are not destinations.
|
||||
val offered = model.state.value.transferPicker!!.folders.map { it.path.name }
|
||||
assertFalse(".hidden-backup" in offered)
|
||||
|
||||
// Showing hidden files is a statement about what the user wants to see, so the picker follows it.
|
||||
model.toggleShowHidden()
|
||||
model.pickerOpen(root)
|
||||
assertTrue(".hidden-backup" in model.state.value.transferPicker!!.folders.map { it.path.name })
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `the picker walks up to the volumes and back down`() {
|
||||
val model = viewModel()
|
||||
|
||||
Reference in New Issue
Block a user