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

Commit 5b8743f3 authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Fix the fix for storage ANRs.

This repairs Icf2a836b6 to avoid an infinite loop on boot.

Bug: 3138068
Change-Id: Ic3a0455e18002dfb82774d96b3467030c4b15e2f
parent 906b830d
Loading
Loading
Loading
Loading
+29 −2
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.storage.StorageEventListener;
import android.os.storage.StorageManager;
import android.provider.Settings;
@@ -60,6 +62,8 @@ public class StorageNotification extends StorageEventListener {
    private boolean        mUmsAvailable;
    private StorageManager mStorageManager;

    private Handler        mAsyncEventHandler;

    public StorageNotification(Context context) {
        mContext = context;

@@ -67,6 +71,11 @@ public class StorageNotification extends StorageEventListener {
        final boolean connected = mStorageManager.isUsbMassStorageConnected();
        Slog.d(TAG, String.format( "Startup with UMS connection %s (media state %s)", mUmsAvailable,
                Environment.getExternalStorageState()));
        
        HandlerThread thr = new HandlerThread("SystemUI StorageNotification");
        thr.start();
        mAsyncEventHandler = new Handler(thr.getLooper());

        onUsbMassStorageConnectionChanged(connected);
    }

@@ -74,7 +83,16 @@ public class StorageNotification extends StorageEventListener {
     * @override com.android.os.storage.StorageEventListener
     */
    @Override
    public void onUsbMassStorageConnectionChanged(boolean connected) {
    public void onUsbMassStorageConnectionChanged(final boolean connected) {
        mAsyncEventHandler.post(new Runnable() {
            @Override
            public void run() {
                onUsbMassStorageConnectionChangedAsync(connected);
            }
        });
    }

    private void onUsbMassStorageConnectionChangedAsync(boolean connected) {
        mUmsAvailable = connected;
        /*
         * Even though we may have a UMS host connected, we the SD card
@@ -98,7 +116,16 @@ public class StorageNotification extends StorageEventListener {
     * @override com.android.os.storage.StorageEventListener
     */
    @Override
    public void onStorageStateChanged(String path, String oldState, String newState) {
    public void onStorageStateChanged(final String path, final String oldState, final String newState) {
        mAsyncEventHandler.post(new Runnable() {
            @Override
            public void run() {
                onStorageStateChangedAsync(path, oldState, newState);
            }
        });
    }

    private void onStorageStateChangedAsync(String path, String oldState, String newState) {
        Slog.i(TAG, String.format(
                "Media {%s} state changed from {%s} -> {%s}", path, oldState, newState));
        if (newState.equals(Environment.MEDIA_SHARED)) {