Codebase review: translations, share/timeout fixes, Maps open, version 1.3.11 - #178
Merged
Merged
Conversation
…pers Cover ShareHandlerActivity intent handling, PermissionManager, LocalNotifications, MetadataDisplayer map coordinates, MediaUriResolver, AppProcessingScope, MediaStoreWrites, and VideoMedia3Converter format mapping. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Robolectric's legacy graphics decode arbitrary bytes into fake bitmaps, so ShareHandlerActivityTest behaved differently on Linux CI than on Windows. Also include logcat errors in assertion messages and log full exceptions for failing unit tests so CI failures are diagnosable from the console. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FileProvider caches path roots statically while Robolectric gives each test a new data directory, so the second test producing a share URI was rejected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wrap metadata rows in a tonal inset container with inset dividers, and use primary-colored labels with BodyLarge values. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… verification failures
Fixes REDACT-1S: cancelShareProcessing/finishWithError/onDestroy ran
SecureDelete's multi-pass overwrite+fsync synchronously on the main
thread, which can block long enough to trip the ANR watchdog on large
shared videos. Cleanup now runs on a background executor.
Fixes REDACT-1H, REDACT-1J, REDACT-1Q, REDACT-1R: when snapshotting an
inbound shared URI failed (source already unreadable), the code fell
back to forwarding the same original URI into the rest of the pipeline,
where every later stage (extractor, transcoder, verifier) failed
identically on the same dead URI and logged its own exception. One
real failure was producing four separate crash reports. Unreadable
items are now dropped instead of forwarded.
Fixes REDACT-1V: verifyVideoMetadataRemoval compared the source's raw
METADATA_KEY_DATE against the output's, but Android reports the exact
same sentinel string ("19040101T000000.000Z", the QuickTime epoch) for
both a date-less source and our own date-less encoder output. Any video
with no real creation date was permanently failing verification because
the placeholder matched itself. The placeholder is now normalized to
null before the comparison.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KUuhuB3pkJmPUmtdpqPxJp
…dead code Run the stale-temp cache sweep from RedactApplication.onCreate (every process start) instead of only MainActivity.onCreate, so a user who only ever enters through the share sheet no longer leaves unredacted source snapshots in cache past the 24h cutoff just because they never open the main app. A per-process guard keeps the sweep from running twice on an ordinary cold start into MainActivity. Switch ConvertFileAdapter to the same DiffUtil pattern MediaAdapter already uses, instead of notifyDataSetChanged(), so unrelated rows keep their loaded thumbnail instead of reloading on every edit. Remove dead code found while simplifying: MetadataStripper's unused file-size cache (fileSizeCache/getFileSizeFromUri/ getFileSizeFromUriCached/clearFileSizeCache, ~95 lines, no callers anywhere), duplicate unused stripExtension/sanitizeFileName helpers in both FormatConverter and VideoMedia3Converter, and PermissionManager's unused requestMediaPermissions/requestStoragePermissions wrappers and TAG constant. Add Android 15+ (API 35) foreground-service timeout handling: ProcessingForegroundService now overrides onTimeout to cancel the active job and stop cleanly instead of being killed outright once the mediaProcessing background execution budget is hit. Also enable predictive back gesture support (enableOnBackInvokedCallback) -- the app has no custom back-press handling to conflict with it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KUuhuB3pkJmPUmtdpqPxJp
Replace the Scan tab's "Copy Coordinates" action with "Open in Maps": tapping it now launches the device's default maps app at that location via an implicit geo: intent, instead of putting the raw lat/lon on the clipboard. Opening a third-party maps app hands it the exact GPS coordinates, which may then leave the device (tile loading, address lookup) -- unlike every other Scan action, which stays entirely on-device. The first time this is used, a dialog explains that and asks for explicit consent before continuing; consenting is remembered via a new AppPreferences flag so it won't ask again, and declining just cancels that one open (asked again next time). Removed the now-unused "Copy Coordinates" string from all locale files rather than leave stale translated text under a key nothing references anymore. The new strings are only added to the default values/strings.xml; other locales fall back to English until translated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KUuhuB3pkJmPUmtdpqPxJp
… and timeout cleanup - Add missing scan_maps_* / scan_open_coordinates_in_maps translations to all 12 locales - Add StringTranslationsTest so missing or mismatched translations fail the build - Count shared items dropped at snapshot time so the partial-success toast still shows - Cancel the Convert batch in ProcessingForegroundService.onTimeout - Replace never-shutdown auto-cleanup executor with a one-shot thread Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
versionCode 20 -> 21, versionName 1.3.10 -> 1.3.11 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- ShareHandlerActivityTest: wait for async snapshot deletion before asserting - CacheCleanup: reset-for-tests joins any in-flight auto-cleanup thread, so a sweep started by Application.onCreate can't delete files mid-test Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Translates the Maps strings in all 12 locales and adds StringTranslationsTest so missing/mismatched translations fail the build.
Also includes share-drop feedback, onTimeout Convert cancellation, auto-cleanup thread fix, cache-sweep privacy fix, Scan restyle, added unit tests, and version bump to 1.3.11 (21).
🤖 Generated with Claude Code