diff options
| author | Daniel Sandler <dsandler@android.com> | 2010-11-03 11:43:03 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-11-03 11:43:03 -0700 |
| commit | dfd7e58d6277f6bf708067da2cf99fdf59189b90 (patch) | |
| tree | 23de7bce915b2d620a98b060dfee821ff9e66070 | |
| parent | f13b44529467995d7608883a65bc4c4e07cc5363 (diff) | |
| parent | 1df8765ac05ed83c212e899fa6c74a6cc012e7b0 (diff) | |
| download | frameworks_base-dfd7e58d6277f6bf708067da2cf99fdf59189b90.zip frameworks_base-dfd7e58d6277f6bf708067da2cf99fdf59189b90.tar.gz frameworks_base-dfd7e58d6277f6bf708067da2cf99fdf59189b90.tar.bz2 | |
am 1df8765a: am cbc3219d: Merge "UMS: Avoid SystemUI ANRs during long vold operations." into gingerbread
* commit '1df8765ac05ed83c212e899fa6c74a6cc012e7b0':
UMS: Avoid SystemUI ANRs during long vold operations.
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java index 47ed7da..fde62d5 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java +++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java @@ -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() { + onStorageStateChanged(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)) { |
