auto import from //branches/cupcake_rel/...@140373
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5220083..0606ecf 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -69,6 +69,7 @@
                 <data android:mimeType="audio/*"/>
                 <data android:mimeType="application/ogg"/>
                 <data android:mimeType="application/x-ogg"/>
+                <data android:mimeType="application/itunes"/>
             </intent-filter>
             <intent-filter>
                 <action android:name="com.android.music.PLAYBACK_VIEWER" />
diff --git a/src/com/android/music/MediaPlaybackActivity.java b/src/com/android/music/MediaPlaybackActivity.java
index 2b9125d..e04b73e 100644
--- a/src/com/android/music/MediaPlaybackActivity.java
+++ b/src/com/android/music/MediaPlaybackActivity.java
@@ -325,23 +325,29 @@
     private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
         public void onStartTrackingTouch(SeekBar bar) {
             mLastSeekEventTime = 0;
+            mFromTouch = true;
         }
-        public void onProgressChanged(SeekBar bar, int progress, boolean fromtouch) {
-            if (mService == null) return;
-            if (fromtouch) {
-                long now = SystemClock.elapsedRealtime();
-                if ((now - mLastSeekEventTime) > 250) {
-                    mLastSeekEventTime = now;
-                    mPosOverride = mDuration * progress / 1000;
-                    try {
-                        mService.seek(mPosOverride);
-                    } catch (RemoteException ex) {
-                    }
+        public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
+            if (!fromuser || (mService == null)) return;
+            long now = SystemClock.elapsedRealtime();
+            if ((now - mLastSeekEventTime) > 250) {
+                mLastSeekEventTime = now;
+                mPosOverride = mDuration * progress / 1000;
+                try {
+                    mService.seek(mPosOverride);
+                } catch (RemoteException ex) {
+                }
+
+                // trackball event, allow progress updates
+                if (!mFromTouch) {
+                    refreshNow();
+                    mPosOverride = -1;
                 }
             }
         }
         public void onStopTrackingTouch(SeekBar bar) {
             mPosOverride = -1;
+            mFromTouch = false;
         }
     };
     
@@ -1086,6 +1092,7 @@
     private TextView mTrackName;
     private ProgressBar mProgress;
     private long mPosOverride = -1;
+    private boolean mFromTouch = false;
     private long mDuration;
     private int seekmethod;
     private boolean paused;