From daafda3c75974b7ea10ba675354dbb5ddd39a213 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Sat, 8 May 2010 16:16:55 -0500 Subject: [PATCH] Don't crash when song selector content changes Run requery code on the main thread --- src/org/kreed/vanilla/SongSelector.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/org/kreed/vanilla/SongSelector.java b/src/org/kreed/vanilla/SongSelector.java index 71d7629c..a21aa72d 100644 --- a/src/org/kreed/vanilla/SongSelector.java +++ b/src/org/kreed/vanilla/SongSelector.java @@ -28,6 +28,7 @@ import android.database.ContentObserver; import android.graphics.Color; import android.graphics.drawable.PaintDrawable; import android.os.Bundle; +import android.os.Handler; import android.os.Message; import android.preference.PreferenceManager; import android.provider.MediaStore; @@ -417,7 +418,8 @@ public class SongSelector extends PlaybackActivity implements AdapterView.OnItem setupView(R.id.song_list, new SongMediaAdapter(this)); ContentResolver resolver = getContentResolver(); - resolver.registerContentObserver(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mObserver); + Observer observer = new Observer(mHandler); + resolver.registerContentObserver(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, observer); break; default: return false; @@ -426,12 +428,22 @@ public class SongSelector extends PlaybackActivity implements AdapterView.OnItem return true; } - private ContentObserver mObserver = new ContentObserver(mHandler) { + private class Observer extends ContentObserver { + public Observer(Handler handler) + { + super(handler); + } + @Override public void onChange(boolean selfChange) { - for (int i = 0; i != 3; ++i) - getAdapter(i).requery(); + runOnUiThread(new Runnable() { + public void run() + { + for (int i = 0; i != 3; ++i) + getAdapter(i).requery(); + } + }); } };