Android: fix media player's volume.

- Preserve the volume when changing the current media.
- Don't actually set a new volume when the media player is muted.
  Intead, save the value to apply it when setMuted(false) is called.

Change-Id: I829eb280406ea35ff82a0c2638b2d19cf1d90643
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
This commit is contained in:
Yoann Lopes
2014-05-16 16:47:41 +02:00
committed by The Qt Project
parent cb6b4e2079
commit cf4aba93e4

View File

@@ -248,6 +248,8 @@ public class QtAndroidMediaPlayer
if (mMediaPlayer == null) { if (mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer(); mMediaPlayer = new MediaPlayer();
setState(State.Idle); setState(State.Idle);
// Make sure the new media player has the volume that was set on the QMediaPlayer
setVolumeHelper(mMuted ? 0 : mVolume);
} }
} }
@@ -476,6 +478,20 @@ public class QtAndroidMediaPlayer
} }
public void setVolume(int volume) public void setVolume(int volume)
{
if (volume < 0)
volume = 0;
if (volume > 100)
volume = 100;
mVolume = volume;
if (!mMuted)
setVolumeHelper(mVolume);
}
private void setVolumeHelper(int volume)
{ {
if ((mState & (State.Idle if ((mState & (State.Idle
| State.Initialized | State.Initialized
@@ -487,18 +503,9 @@ public class QtAndroidMediaPlayer
return; return;
} }
if (volume < 0)
volume = 0;
if (volume > 100)
volume = 100;
float newVolume = adjustVolume(volume);
try { try {
float newVolume = adjustVolume(volume);
mMediaPlayer.setVolume(newVolume, newVolume); mMediaPlayer.setVolume(newVolume, newVolume);
if (!mMuted)
mVolume = volume;
} catch (final IllegalStateException e) { } catch (final IllegalStateException e) {
Log.d(TAG, "" + e.getMessage()); Log.d(TAG, "" + e.getMessage());
} }
@@ -528,7 +535,7 @@ public class QtAndroidMediaPlayer
public void mute(final boolean mute) public void mute(final boolean mute)
{ {
mMuted = mute; mMuted = mute;
setVolume(mute ? 0 : mVolume); setVolumeHelper(mute ? 0 : mVolume);
} }
public boolean isMuted() public boolean isMuted()