Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d687b131 authored by Matt Casey's avatar Matt Casey
Browse files

Always save long screenshot temp file to the same place

If we fail to clean up the file, they won't accumulate over time.

Bug: 191499234
Test: adb shell ls /data/user_de/0/com.android.systemui/cache/long_screenshot_cache* to view files
Test: Verify state restoration still works
Test: Verify temp file disappears when activity is done.
Test: Verify that temp file is overwritten when a new session begins.
Change-Id: Ie15065ef9ff3db91852df1a0dc96afd494e85b8c
parent 2a7139a3
Loading
Loading
Loading
Loading
+10 −19
Original line number Diff line number Diff line
@@ -111,30 +111,21 @@ class ImageExporter {
    }

    /**
     * Stores the given Bitmap to a temp file.
     * Writes the given Bitmap to outputFile.
     */
    ListenableFuture<File> exportAsTempFile(Executor executor, Bitmap bitmap) {
    ListenableFuture<File> exportToRawFile(Executor executor, Bitmap bitmap,
            final File outputFile) {
        return CallbackToFutureAdapter.getFuture(
                (completer) -> {
                    executor.execute(() -> {
                        File cachePath;
                        try {
                            cachePath = File.createTempFile("long_screenshot_cache_", ".tmp");
                            try (FileOutputStream stream = new FileOutputStream(cachePath)) {
                        try (FileOutputStream stream = new FileOutputStream(outputFile)) {
                            bitmap.compress(mCompressFormat, mQuality, stream);
                            completer.set(outputFile);
                        } catch (IOException e) {
                                if (cachePath.exists()) {
                            if (outputFile.exists()) {
                                //noinspection ResultOfMethodCallIgnored
                                    cachePath.delete();
                                    cachePath = null;
                                }
                                completer.setException(e);
                                outputFile.delete();
                            }
                            if (cachePath != null) {
                                completer.set(cachePath);
                            }
                        } catch (IOException e) {
                            // Failed to create a new file
                            completer.setException(e);
                        }
                    });
+2 −2
Original line number Diff line number Diff line
@@ -228,8 +228,8 @@ public class LongScreenshotActivity extends Activity {
                });

        // Immediately export to temp image file for saved state
        mCacheSaveFuture = mImageExporter.exportAsTempFile(mBackgroundExecutor,
                mLongScreenshot.toBitmap());
        mCacheSaveFuture = mImageExporter.exportToRawFile(mBackgroundExecutor,
                mLongScreenshot.toBitmap(), new File(getCacheDir(), "long_screenshot_cache.png"));
        mCacheSaveFuture.addListener(() -> {
            try {
                // Get the temp file path to persist, used in onSavedInstanceState