diff options
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 23 | ||||
| -rw-r--r-- | libs/hwui/LayerRenderer.cpp | 5 | ||||
| -rw-r--r-- | services/audioflinger/AudioPolicyManagerBase.cpp | 12 |
3 files changed, 30 insertions, 10 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 2925632b3033..eca39fc95cba 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -624,6 +624,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te */ private boolean mForceTranscriptScroll; + private int mGlowPaddingLeft; + private int mGlowPaddingRight; + /** * Interface definition for a callback to be invoked when the list or grid * has been scrolled. @@ -3314,9 +3317,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final int scrollY = mScrollY; if (!mEdgeGlowTop.isFinished()) { final int restoreCount = canvas.save(); - final int width = getWidth() - mListPadding.left - mListPadding.right; + final int leftPadding = mListPadding.left + mGlowPaddingLeft; + final int rightPadding = mListPadding.right + mGlowPaddingRight; + final int width = getWidth() - leftPadding - rightPadding; - canvas.translate(mListPadding.left, + canvas.translate(leftPadding, Math.min(0, scrollY + mFirstPositionDistanceGuess)); mEdgeGlowTop.setSize(width, getHeight()); if (mEdgeGlowTop.draw(canvas)) { @@ -3326,10 +3331,12 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } if (!mEdgeGlowBottom.isFinished()) { final int restoreCount = canvas.save(); - final int width = getWidth() - mListPadding.left - mListPadding.right; + final int leftPadding = mListPadding.left + mGlowPaddingLeft; + final int rightPadding = mListPadding.right + mGlowPaddingRight; + final int width = getWidth() - leftPadding - rightPadding; final int height = getHeight(); - canvas.translate(-width + mListPadding.left, + canvas.translate(-width + leftPadding, Math.max(height, scrollY + mLastPositionDistanceGuess)); canvas.rotate(180, width, 0); mEdgeGlowBottom.setSize(width, height); @@ -3353,6 +3360,14 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } } + /** + * @hide + */ + public void setOverScrollEffectPadding(int leftPadding, int rightPadding) { + mGlowPaddingLeft = leftPadding; + mGlowPaddingRight = rightPadding; + } + @Override public boolean onInterceptTouchEvent(MotionEvent ev) { int action = ev.getAction(); diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp index 24f9739715ee..b1eb164a9631 100644 --- a/libs/hwui/LayerRenderer.cpp +++ b/libs/hwui/LayerRenderer.cpp @@ -214,6 +214,11 @@ Layer* LayerRenderer::createLayer(uint32_t width, uint32_t height, bool isOpaque glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, layer->texture, 0); + glDisable(GL_SCISSOR_TEST); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClear(GL_COLOR_BUFFER_BIT); + glEnable(GL_SCISSOR_TEST); + glBindFramebuffer(GL_FRAMEBUFFER, previousFbo); return layer; diff --git a/services/audioflinger/AudioPolicyManagerBase.cpp b/services/audioflinger/AudioPolicyManagerBase.cpp index bfc80dbf4023..74be4e01843e 100644 --- a/services/audioflinger/AudioPolicyManagerBase.cpp +++ b/services/audioflinger/AudioPolicyManagerBase.cpp @@ -122,12 +122,12 @@ status_t AudioPolicyManagerBase::setDeviceConnectionState(AudioSystem::audio_dev // request routing change if necessary uint32_t newDevice = getNewDevice(mHardwareOutput, false); #ifdef WITH_A2DP + checkA2dpSuspend(); checkOutputForAllStrategies(); // A2DP outputs must be closed after checkOutputForAllStrategies() is executed if (state == AudioSystem::DEVICE_STATE_UNAVAILABLE && AudioSystem::isA2dpDevice(device)) { closeA2dpOutputs(); } - checkA2dpSuspend(); #endif updateDeviceForStrategy(); setOutputDevice(mHardwareOutput, newDevice); @@ -269,8 +269,8 @@ void AudioPolicyManagerBase::setPhoneState(int state) // check for device and output changes triggered by new phone state newDevice = getNewDevice(mHardwareOutput, false); #ifdef WITH_A2DP - checkOutputForAllStrategies(); checkA2dpSuspend(); + checkOutputForAllStrategies(); #endif updateDeviceForStrategy(); @@ -378,8 +378,8 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst // check for device and output changes triggered by new phone state uint32_t newDevice = getNewDevice(mHardwareOutput, false); #ifdef WITH_A2DP - checkOutputForAllStrategies(); checkA2dpSuspend(); + checkOutputForAllStrategies(); #endif updateDeviceForStrategy(); setOutputDevice(mHardwareOutput, newDevice); @@ -1624,7 +1624,7 @@ uint32_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy strategy, if (device) break; #ifdef WITH_A2DP // when not in a phone call, phone strategy should route STREAM_VOICE_CALL to A2DP - if (!isInCall()) { + if (!isInCall() && !mA2dpSuspended) { device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP; if (device) break; device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; @@ -1647,7 +1647,7 @@ uint32_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy strategy, #ifdef WITH_A2DP // when not in a phone call, phone strategy should route STREAM_VOICE_CALL to // A2DP speaker when forcing to speaker output - if (!isInCall()) { + if (!isInCall() && !mA2dpSuspended) { device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER; if (device) break; } @@ -1687,7 +1687,7 @@ uint32_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy strategy, device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET; } #ifdef WITH_A2DP - if ((mA2dpOutput != 0) && + if ((mA2dpOutput != 0) && !mA2dpSuspended && (strategy != STRATEGY_SONIFICATION || a2dpUsedForSonification())) { if (device2 == 0) { device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP; |