import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
+import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.IBinder.DeathRecipient;
synchronized(mRCStack) {
if ((mMediaReceiverForCalls != null) &&
(mIsRinging || (mAudioService.getMode() == AudioSystem.MODE_IN_CALL))) {
- dispatchMediaKeyEventForCalls(keyEvent, needWakeLock);
+ if (Binder.getCallingUid() != Process.SYSTEM_UID) {
+ // Prevent dispatching key event to the global priority session.
+ Slog.i(TAG, "Only the system can dispatch media key event "
+ + "to the global priority session.");
+ } else {
+ dispatchMediaKeyEventForCalls(keyEvent, needWakeLock);
+ }
return;
}
}
case KeyEvent.KEYCODE_MEDIA_RECORD:
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK: {
+ ITelephony telephonyService = getTelephonyService();
+ if (telephonyService != null) {
+ try {
+ if (!telephonyService.isIdle()) {
+ // When phone is ringing or in-call, pass all media keys to it.
+ result &= ~ACTION_PASS_TO_USER;
+ }
+ } catch (RemoteException ex) {
+ Log.w(TAG, "ITelephony threw RemoteException", ex);
+ }
+ }
+
if ((result & ACTION_PASS_TO_USER) == 0) {
// Only do this if we would otherwise not pass it to the user. In that
// case, the PhoneWindow class will do the same thing, except it will