am 6ba13ac5: Merge "AudioService: Fix monitorRotation for landscape applications"

* commit '6ba13ac56663a45a7f16feb465d451f0180fae26':
  AudioService: Fix monitorRotation for landscape applications
This commit is contained in:
Glenn Kasten
2014-10-02 16:23:36 +00:00
committed by Android Git Automerger

View File

@@ -77,6 +77,7 @@ import android.view.KeyEvent;
import android.view.Surface;
import android.view.VolumePanel;
import android.view.WindowManager;
import android.view.OrientationEventListener;
import com.android.internal.telephony.ITelephony;
import com.android.internal.util.XmlUtils;
@@ -460,6 +461,8 @@ public class AudioService extends IAudioService.Stub {
// If absolute volume is supported in AVRCP device
private boolean mAvrcpAbsVolSupported = false;
private AudioOrientationEventListener mOrientationListener;
///////////////////////////////////////////////////////////////////////////
// Construction
///////////////////////////////////////////////////////////////////////////
@@ -558,6 +561,10 @@ public class AudioService extends IAudioService.Stub {
mDeviceRotation = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getRotation();
Log.v(TAG, "monitoring device rotation, initial=" + mDeviceRotation);
mOrientationListener = new AudioOrientationEventListener(mContext);
mOrientationListener.enable();
// initialize rotation in AudioSystem
setRotationForAudioSystem();
}
@@ -754,6 +761,25 @@ public class AudioService extends IAudioService.Stub {
return (index * mStreamStates[dstStream].getMaxIndex() + mStreamStates[srcStream].getMaxIndex() / 2) / mStreamStates[srcStream].getMaxIndex();
}
private class AudioOrientationEventListener
extends OrientationEventListener {
public AudioOrientationEventListener(Context context) {
super(context);
}
@Override
public void onOrientationChanged(int orientation) {
//Even though we're responding to phone orientation events,
//use display rotation so audio stays in sync with video/dialogs
int newRotation = ((WindowManager) mContext.getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
if (newRotation != mDeviceRotation) {
mDeviceRotation = newRotation;
setRotationForAudioSystem();
}
}
}
///////////////////////////////////////////////////////////////////////////
// IPC methods
///////////////////////////////////////////////////////////////////////////
@@ -4195,8 +4221,16 @@ public class AudioService extends IAudioService.Stub {
null,
SAFE_VOLUME_CONFIGURE_TIMEOUT_MS);
} else if (action.equals(Intent.ACTION_SCREEN_ON)) {
if (mMonitorRotation) {
mOrientationListener.onOrientationChanged(0); //argument is ignored anyway
mOrientationListener.enable();
}
AudioSystem.setParameters("screen_state=on");
} else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
if (mMonitorRotation) {
//reduce wakeups (save current) by only listening when display is on
mOrientationListener.disable();
}
AudioSystem.setParameters("screen_state=off");
} else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
handleConfigurationChanged(context);
@@ -4359,14 +4393,6 @@ public class AudioService extends IAudioService.Stub {
setOrientationForAudioSystem();
}
}
if (mMonitorRotation) {
int newRotation = ((WindowManager) context.getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
if (newRotation != mDeviceRotation) {
mDeviceRotation = newRotation;
setRotationForAudioSystem();
}
}
sendMsg(mAudioHandler,
MSG_CONFIGURE_SAFE_MEDIA_VOLUME,
SENDMSG_REPLACE,