am e825d695: am 3a85b618: am 065b605c: am 55ecb483: Merge "Don\'t forward media keys to the app if the phone session is active" into lmp-dev

* commit 'e825d6958821a4d63c2e7db39c1c02b4300dd1c8':
  Don't forward media keys to the app if the phone session is active
This commit is contained in:
RoboErik
2014-09-26 23:13:54 +00:00
committed by Android Git Automerger
6 changed files with 38 additions and 12 deletions

View File

@@ -38,4 +38,7 @@ interface ISessionManager {
// This is for the system volume UI only
void setRemoteVolumeController(in IRemoteVolumeController rvc);
// For PhoneWindowManager to precheck media keys
boolean isGlobalPriorityActive();
}

View File

@@ -232,6 +232,10 @@ public class MediaSessionLegacyHelper {
}
}
public boolean isGlobalPriorityActive() {
return mSessionManager.isGlobalPriorityActive();
}
public void addRccListener(PendingIntent pi, MediaSession.Callback listener) {
if (pi == null) {
Log.w(TAG, "Pending intent was null, can't add rcc listener.");

View File

@@ -295,6 +295,21 @@ public final class MediaSessionManager {
}
}
/**
* Check if the global priority session is currently active. This can be
* used to decide if media keys should be sent to the session or to the app.
*
* @hide
*/
public boolean isGlobalPriorityActive() {
try {
return mService.isGlobalPriorityActive();
} catch (RemoteException e) {
Log.e(TAG, "Failed to check if the global priority is active.", e);
}
return false;
}
/**
* Listens for changes to the list of active sessions. This can be added
* using {@link #addOnActiveSessionsChangedListener}.

View File

@@ -4248,8 +4248,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
boolean isWakeKey = (policyFlags & WindowManagerPolicy.FLAG_WAKE) != 0
|| event.isWakeKey();
if (interactive || (isInjected && !isWakeKey)) {
// When the device is interactive or the key is injected pass the key to the
// application.
// When the device is interactive or the key is injected pass the
// key to the application.
result = ACTION_PASS_TO_USER;
isWakeKey = false;
} else if (!interactive && shouldDispatchInputWhenNonInteractive()) {
@@ -4449,16 +4449,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
case KeyEvent.KEYCODE_MEDIA_PLAY:
case KeyEvent.KEYCODE_MEDIA_PAUSE:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
if (down) {
TelecomManager telecomManager = getTelecommService();
if (telecomManager != null) {
if (telecomManager.isInCall()) {
// Suppress PLAY/PAUSE toggle when phone is ringing or in-call
// to avoid music playback.
break;
}
}
}
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_MUTE:
case KeyEvent.KEYCODE_MEDIA_STOP:
@@ -4468,6 +4458,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
case KeyEvent.KEYCODE_MEDIA_RECORD:
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK: {
if (MediaSessionLegacyHelper.getHelper(mContext).isGlobalPriorityActive()) {
// If the global session is active pass all media keys to it
// instead of the active window.
result &= ~ACTION_PASS_TO_USER;
}
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

View File

@@ -742,6 +742,11 @@ public class MediaSessionService extends SystemService implements Monitor {
}
}
@Override
public boolean isGlobalPriorityActive() {
return mPriorityStack.isGlobalPriorityActive();
}
@Override
public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
if (getContext().checkCallingOrSelfPermission(Manifest.permission.DUMP)

View File

@@ -217,6 +217,10 @@ public class MediaSessionStack {
return null;
}
public boolean isGlobalPriorityActive() {
return mGlobalPrioritySession == null ? false : mGlobalPrioritySession.isActive();
}
public void dump(PrintWriter pw, String prefix) {
ArrayList<MediaSessionRecord> sortedSessions = getPriorityListLocked(false, 0,
UserHandle.USER_ALL);