diff options
| author | 2013-07-30 21:40:59 +0000 | |
|---|---|---|
| committer | 2013-07-30 21:46:13 +0000 | |
| commit | 8847633fc4869a701daa03f63a619e3047cda5bb (patch) | |
| tree | 1cd4c164789d912664159279a1f64ce34e023da2 | |
| parent | 967032b7645f6ca16bea2315f12f2bd2d4977f59 (diff) | |
| parent | 53e6e287ffe924b6d26237e167a1a8996054e17e (diff) | |
Merge "Focus loss value takes into account previous loss"
| -rw-r--r-- | media/java/android/media/FocusRequester.java | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/media/java/android/media/FocusRequester.java b/media/java/android/media/FocusRequester.java index e1a175ddcb79..6b34b5671c42 100644 --- a/media/java/android/media/FocusRequester.java +++ b/media/java/android/media/FocusRequester.java @@ -170,20 +170,52 @@ class FocusRequester { /** * For a given audio focus gain request, return the audio focus loss type that will result - * from it. + * from it, taking into account any previous focus loss. * @param gainRequest * @return the audio focus loss type that matches the gain request */ private int focusLossForGainRequest(int gainRequest) { - // FIXME to be updated to take into account mFocusLossReceived - return -gainRequest; // focus loss codes are the inverse of the gain codes + switch(gainRequest) { + case AudioManager.AUDIOFOCUS_GAIN: + switch(mFocusLossReceived) { + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: + case AudioManager.AUDIOFOCUS_LOSS: + case AUDIOFOCUS_NONE: + return AudioManager.AUDIOFOCUS_LOSS; + } + case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT: + switch(mFocusLossReceived) { + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: + case AUDIOFOCUS_NONE: + return AudioManager.AUDIOFOCUS_LOSS_TRANSIENT; + case AudioManager.AUDIOFOCUS_LOSS: + return AudioManager.AUDIOFOCUS_LOSS; + } + case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK: + switch(mFocusLossReceived) { + case AUDIOFOCUS_NONE: + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: + return AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK; + case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: + return AudioManager.AUDIOFOCUS_LOSS_TRANSIENT; + case AudioManager.AUDIOFOCUS_LOSS: + return AudioManager.AUDIOFOCUS_LOSS; + } + default: + Log.e(TAG, "focusLossForGainRequest() for invalid focus request "+ gainRequest); + return AUDIOFOCUS_NONE; + } } void handleExternalFocusGain(int focusGain) { try { int focusLoss = focusLossForGainRequest(focusGain); - mFocusDispatcher.dispatchAudioFocusChange(focusLoss, mClientId); - mFocusLossReceived = focusLoss; + if (focusLoss != mFocusLossReceived) { + mFocusDispatcher.dispatchAudioFocusChange(focusLoss, mClientId); + mFocusLossReceived = focusLoss; + } } catch (android.os.RemoteException e) { Log.e(TAG, "Failure to signal loss of focus: ", e); } @@ -202,6 +234,7 @@ class FocusRequester { try { mFocusDispatcher.dispatchAudioFocusChange( focusLoss, mClientId); + mFocusLossReceived = focusLoss; } catch (android.os.RemoteException e) { Log.e(TAG, "Failure to signal loss of audio focus due to:", e); } |