feat: Implement SHA-1 pre-calculation and image loading abort logic #6606
+182
−44
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.
Description (required)
Fixes #6607 (Specifically addressing TODOs in ImageFileLoader and related classes)
Changes implemented:
ImageFileLoaderduring the initial device scan. This ensures eachImagemodel carries its digital fingerprint from the start, allowingImageLoaderto perform duplicate checks on Commons without redundant file I/O.abortLoadImagemechanism inImageFileLoaderusing CoroutineJobcancellation.ImageAdaptercleanup phase andCustomSelectorViewModel'sonClearedmethod to ensure background scanning stops immediately when the user exits the gallery.ImageFragmentandCustomSelectorViewModelFactoryto support the newImageFileLoaderdependency requirements.Why?
These changes resolve long-standing TODOs in the codebase meant to improve app performance and prevent accidental duplicate uploads by making the SHA-1 consistently available across the Custom Selector components.
Tests performed (required)
Tested ProDebug variant on Redmi Note 13 Pro with API level 35.
ImageFileLoaderTestandImageAdapterTestto verify:abortLoadImageis called.shadowOf(Looper.getMainLooper()).idle().Screenshots (for UI changes only)
N/A (Logic and performance optimization)