Merge "Fix build break."
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 0e7d5d0..2d483d3 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -34,6 +34,8 @@
 import android.content.ServiceConnection;
 import android.content.res.Configuration;
 import android.media.AudioManager;
+import android.media.session.Session;
+import android.media.session.SessionManager;
 import android.net.Uri;
 import android.os.AsyncResult;
 import android.os.Binder;
@@ -216,6 +218,9 @@
 
     // Broadcast receiver purely for ACTION_MEDIA_BUTTON broadcasts
     private final BroadcastReceiver mMediaButtonReceiver = new MediaButtonBroadcastReceiver();
+    private final SessionCallback mSessionCallback = new SessionCallback();
+
+    private Session mSession;
 
     /** boolean indicating restoring mute state on InCallScreen.onResume() */
     private boolean mShouldRestoreMuteOnInCallResume;
@@ -557,6 +562,14 @@
             // audio-mode-related state of our own) is initialized
             // correctly, given the current state of the phone.
             PhoneUtils.setAudioMode(mCM);
+
+            // Register a MediaSession but don't enable it yet. This is a
+            // replacement for MediaButtonReceiver
+            SessionManager msm = (SessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
+            mSession = msm.createSession(LOG_TAG);
+            mSession.addCallback(mSessionCallback);
+            mSession.setFlags(Session.FLAG_EXCLUSIVE_GLOBAL_PRIORITY
+                    | Session.FLAG_HANDLES_MEDIA_BUTTONS);
         }
 
         if (TelephonyCapabilities.supportsOtasp(phone)) {
@@ -921,10 +934,16 @@
                 if (!mUpdateLock.isHeld()) {
                     mUpdateLock.acquire();
                 }
+                if (!mSession.isActive()) {
+                    mSession.setActive(true);
+                }
             } else {
                 if (mUpdateLock.isHeld()) {
                     mUpdateLock.release();
                 }
+                if (mSession.isActive()) {
+                    mSession.setActive(false);
+                }
             }
         }
     }
@@ -1083,6 +1102,19 @@
         }
     }
 
+    private class SessionCallback extends Session.Callback {
+        @Override
+        public void onMediaButton(Intent intent) {
+            KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
+            if (VDBG) Log.d(LOG_TAG, "SessionCallback.onMediaButton()...  event = " + event);
+            if ((event != null) && (event.getKeyCode() == KeyEvent.KEYCODE_HEADSETHOOK)) {
+                if (VDBG) Log.d(LOG_TAG, "SessionCallback: HEADSETHOOK");
+                boolean consumed = PhoneUtils.handleHeadsetHook(phone, event);
+                if (VDBG) Log.d(LOG_TAG, "==> handleHeadsetHook(): consumed = " + consumed);
+            }
+        }
+    }
+
     /**
      * Broadcast receiver for the ACTION_MEDIA_BUTTON broadcast intent.
      *