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

Commit dc4b80dd authored by Suprabh Shukla's avatar Suprabh Shukla
Browse files

Removing disk access from startActivity thread

Code was checking whether the directory for recent_images existed in
many places unnecessarily causing StrictMode violations. Moved the
code to only attempt to check and create the directory before
actually writing to disk.

Bug: b/28195831
Change-Id: I05f77a10f1dafc8cc0b1836b62352d56549ac1ee
parent dd67b0d5
Loading
Loading
Loading
Loading
+10 −11
Original line number Original line Diff line number Diff line
@@ -17,8 +17,6 @@
package com.android.server.am;
package com.android.server.am;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.graphics.Bitmap;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory;
import android.os.Debug;
import android.os.Debug;
@@ -519,7 +517,7 @@ public class TaskPersister {
        if (DEBUG) Slog.d(TAG, "removeObsoleteFiles: persistentTaskIds=" + persistentTaskIds +
        if (DEBUG) Slog.d(TAG, "removeObsoleteFiles: persistentTaskIds=" + persistentTaskIds +
                " files=" + files);
                " files=" + files);
        if (files == null) {
        if (files == null) {
            Slog.e(TAG, "File error accessing recents directory (too many files open?).");
            Slog.e(TAG, "File error accessing recents directory (directory doesn't exist?).");
            return;
            return;
        }
        }
        for (int fileNdx = 0; fileNdx < files.length; ++fileNdx) {
        for (int fileNdx = 0; fileNdx < files.length; ++fileNdx) {
@@ -597,15 +595,12 @@ public class TaskPersister {
    }
    }


    static File getUserImagesDir(int userId) {
    static File getUserImagesDir(int userId) {
        File userImagesDir = new File(Environment.getDataSystemCeDirectory(userId), IMAGES_DIRNAME);
        return new File(Environment.getDataSystemCeDirectory(userId), IMAGES_DIRNAME);

        if (!userImagesDir.exists()) {
            if (!userImagesDir.mkdir()) {
                Slog.e(TAG, "Failure creating images directory for user " + userId + ": "
                        + userImagesDir);
            }
    }
    }
        return userImagesDir;

    private static boolean createParentDirectory(String filePath) {
        File parentDir = new File(filePath).getParentFile();
        return parentDir.exists() || parentDir.mkdirs();
    }
    }


    private class LazyTaskWriterThread extends Thread {
    private class LazyTaskWriterThread extends Thread {
@@ -693,6 +688,10 @@ public class TaskPersister {
                if (item instanceof ImageWriteQueueItem) {
                if (item instanceof ImageWriteQueueItem) {
                    ImageWriteQueueItem imageWriteQueueItem = (ImageWriteQueueItem) item;
                    ImageWriteQueueItem imageWriteQueueItem = (ImageWriteQueueItem) item;
                    final String filePath = imageWriteQueueItem.mFilePath;
                    final String filePath = imageWriteQueueItem.mFilePath;
                    if (!createParentDirectory(filePath)) {
                        Slog.e(TAG, "Error while creating images directory for file: " + filePath);
                        continue;
                    }
                    final Bitmap bitmap = imageWriteQueueItem.mImage;
                    final Bitmap bitmap = imageWriteQueueItem.mImage;
                    if (DEBUG) Slog.d(TAG, "writing bitmap: filename=" + filePath);
                    if (DEBUG) Slog.d(TAG, "writing bitmap: filename=" + filePath);
                    FileOutputStream imageFile = null;
                    FileOutputStream imageFile = null;