diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index eb42b6d..432eddd 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -1475,24 +1475,32 @@
 
     boolean onMediaButton(int type) {
         if (hasAnyCalls()) {
+            Call ringingCall = getFirstCallWithState(CallState.RINGING);
             if (HeadsetMediaButton.SHORT_PRESS == type) {
-                Call ringingCall = getFirstCallWithState(CallState.RINGING);
                 if (ringingCall == null) {
-                    mCallAudioManager.toggleMute();
-                    return true;
+                    Call callToHangup = getFirstCallWithState(CallState.RINGING, CallState.DIALING,
+                            CallState.PULLING, CallState.ACTIVE, CallState.ON_HOLD);
+                    Log.addEvent(callToHangup, LogUtils.Events.INFO,
+                            "media btn short press - end call.");
+                    if (callToHangup != null) {
+                        callToHangup.disconnect();
+                        return true;
+                    }
                 } else {
                     ringingCall.answer(VideoProfile.STATE_AUDIO_ONLY);
                     return true;
                 }
             } else if (HeadsetMediaButton.LONG_PRESS == type) {
-                Log.d(this, "handleHeadsetHook: longpress -> hangup");
-                Call callToHangup = getFirstCallWithState(
-                        CallState.RINGING, CallState.DIALING, CallState.PULLING, CallState.ACTIVE,
-                        CallState.ON_HOLD);
-                if (callToHangup != null) {
-                    callToHangup.disconnect();
-                    return true;
+                if (ringingCall != null) {
+                    Log.addEvent( getForegroundCall(), LogUtils.Events.INFO,
+                            "media btn long press - reject");
+                    ringingCall.reject(false, null);
+                } else {
+                    Log.addEvent(getForegroundCall(), LogUtils.Events.INFO,
+                            "media btn long press - mute");
+                    mCallAudioManager.toggleMute();
                 }
+                return true;
             }
         }
         return false;
diff --git a/src/com/android/server/telecom/HeadsetMediaButton.java b/src/com/android/server/telecom/HeadsetMediaButton.java
index f9ba60e..7d6a798 100644
--- a/src/com/android/server/telecom/HeadsetMediaButton.java
+++ b/src/com/android/server/telecom/HeadsetMediaButton.java
@@ -93,6 +93,7 @@
     private final CallsManager mCallsManager;
     private final TelecomSystem.SyncRoot mLock;
     private MediaSession mSession;
+    private KeyEvent mLastHookEvent;
 
     public HeadsetMediaButton(
             Context context,
@@ -115,10 +116,24 @@
     private boolean handleHeadsetHook(KeyEvent event) {
         Log.d(this, "handleHeadsetHook()...%s %s", event.getAction(), event.getRepeatCount());
 
+        // Save ACTION_DOWN Event temporarily.
+        if (event.getAction() == KeyEvent.ACTION_DOWN) {
+            mLastHookEvent = event;
+        }
+
         if (event.isLongPress()) {
             return mCallsManager.onMediaButton(LONG_PRESS);
-        } else if (event.getAction() == KeyEvent.ACTION_UP && event.getRepeatCount() == 0) {
-            return mCallsManager.onMediaButton(SHORT_PRESS);
+        } else if (event.getAction() == KeyEvent.ACTION_UP) {
+            // We should not judge SHORT_PRESS by ACTION_UP event repeatCount, because it always
+            // return 0.
+            // Actually ACTION_DOWN event repeatCount only increases when LONG_PRESS performed.
+            if (mLastHookEvent != null && mLastHookEvent.getRepeatCount() == 0) {
+                return mCallsManager.onMediaButton(SHORT_PRESS);
+            }
+        }
+
+        if (event.getAction() != KeyEvent.ACTION_DOWN) {
+            mLastHookEvent = null;
         }
 
         return true;
