Changed UpnpPlayer to store volume locally instead of always querying it.
This commit is contained in:
parent
fa6d444d1b
commit
048fad32f6
2 changed files with 40 additions and 48 deletions
|
@ -143,11 +143,11 @@ public class MainActivity extends ActionBarActivity {
|
||||||
switch (event.getKeyCode()) {
|
switch (event.getKeyCode()) {
|
||||||
case KeyEvent.KEYCODE_VOLUME_UP:
|
case KeyEvent.KEYCODE_VOLUME_UP:
|
||||||
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
||||||
mPlayer.increaseVolume();
|
mPlayer.changeVolume(1);
|
||||||
return true;
|
return true;
|
||||||
case KeyEvent.KEYCODE_VOLUME_DOWN:
|
case KeyEvent.KEYCODE_VOLUME_DOWN:
|
||||||
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
||||||
mPlayer.decreaseVolume();
|
mPlayer.changeVolume(-1);
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return super.dispatchKeyEvent(event);
|
return super.dispatchKeyEvent(event);
|
||||||
|
|
|
@ -57,11 +57,13 @@ public class UpnpPlayer extends UpnpController {
|
||||||
|
|
||||||
private PlayServiceBinder mPlayService;
|
private PlayServiceBinder mPlayService;
|
||||||
|
|
||||||
private long mMinVolume;
|
private int mMinVolume;
|
||||||
|
|
||||||
private long mMaxVolume;
|
private int mMaxVolume;
|
||||||
|
|
||||||
private long mVolumeStep;
|
private int mVolumeStep;
|
||||||
|
|
||||||
|
private int mCurrentVolume;
|
||||||
|
|
||||||
private ServiceConnection mPlayServiceConnection = new ServiceConnection() {
|
private ServiceConnection mPlayServiceConnection = new ServiceConnection() {
|
||||||
|
|
||||||
|
@ -100,13 +102,15 @@ public class UpnpPlayer extends UpnpController {
|
||||||
/**
|
/**
|
||||||
* Sets an absolute volume.
|
* Sets an absolute volume.
|
||||||
*/
|
*/
|
||||||
public void setVolume(long newVolume) {
|
public void setVolume(int newVolume) {
|
||||||
if (mPlayService.getService().getRenderer() == null)
|
if (mPlayService.getService().getRenderer() == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (newVolume > mMaxVolume) newVolume = mMaxVolume;
|
if (newVolume > mMaxVolume) newVolume = mMaxVolume;
|
||||||
if (newVolume < mMinVolume) newVolume = mMinVolume;
|
if (newVolume < mMinVolume) newVolume = mMinVolume;
|
||||||
|
|
||||||
|
mCurrentVolume = newVolume;
|
||||||
|
Log.d(TAG, "volume: " + Integer.toString(mCurrentVolume));
|
||||||
mUpnpService.getControlPoint().execute(
|
mUpnpService.getControlPoint().execute(
|
||||||
new SetVolume(getService("RenderingControl"), newVolume) {
|
new SetVolume(getService("RenderingControl"), newVolume) {
|
||||||
|
|
||||||
|
@ -125,9 +129,35 @@ public class UpnpPlayer extends UpnpController {
|
||||||
*
|
*
|
||||||
* @param amount Amount to change volume by (negative to lower volume).
|
* @param amount Amount to change volume by (negative to lower volume).
|
||||||
*/
|
*/
|
||||||
private void changeVolume(final long amount) {
|
public void changeVolume(int delta) {
|
||||||
if (mPlayService.getService().getRenderer() == null)
|
if (delta > 0 && delta < mVolumeStep) {
|
||||||
return;
|
delta = mVolumeStep;
|
||||||
|
}
|
||||||
|
else if (delta < 0 && delta > -mVolumeStep) {
|
||||||
|
delta = -mVolumeStep;
|
||||||
|
}
|
||||||
|
setVolume(mCurrentVolume + delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selects the renderer for playback, applying its minimum and maximum volume.
|
||||||
|
*/
|
||||||
|
public void selectRenderer(Device<?, ?, ?> renderer) {
|
||||||
|
mPlayService.getService().setRenderer(renderer);
|
||||||
|
|
||||||
|
if (getService("RenderingControl").getStateVariable("Volume") != null) {
|
||||||
|
StateVariableAllowedValueRange volumeRange =
|
||||||
|
getService("RenderingControl").getStateVariable("Volume")
|
||||||
|
.getTypeDetails().getAllowedValueRange();
|
||||||
|
mMinVolume = (int) volumeRange.getMinimum();
|
||||||
|
mMaxVolume = (int) volumeRange.getMaximum();
|
||||||
|
mVolumeStep = (int) volumeRange.getStep();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mMinVolume = 0;
|
||||||
|
mMaxVolume = 100;
|
||||||
|
mVolumeStep = 1;
|
||||||
|
}
|
||||||
|
|
||||||
mUpnpService.getControlPoint().execute(
|
mUpnpService.getControlPoint().execute(
|
||||||
new GetVolume(getService("RenderingControl")) {
|
new GetVolume(getService("RenderingControl")) {
|
||||||
|
@ -142,49 +172,11 @@ public class UpnpPlayer extends UpnpController {
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
@Override
|
@Override
|
||||||
public void received(ActionInvocation invocation, int currentVolume) {
|
public void received(ActionInvocation invocation, int currentVolume) {
|
||||||
setVolume(currentVolume + amount);
|
mCurrentVolume = currentVolume;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Increases the device volume by a minimum volume step.
|
|
||||||
*/
|
|
||||||
public void increaseVolume() {
|
|
||||||
changeVolume(mVolumeStep);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decreases the device volume by a minimum volume step.
|
|
||||||
*/
|
|
||||||
public void decreaseVolume() {
|
|
||||||
changeVolume(- mVolumeStep);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Selects the renderer for playback, applying its minimum and maximum volume.
|
|
||||||
*/
|
|
||||||
public void selectRenderer(Device<?, ?, ?> renderer) {
|
|
||||||
mPlayService.getService().setRenderer(renderer);
|
|
||||||
|
|
||||||
if (getService("RenderingControl").getStateVariable("Volume") != null) {
|
|
||||||
StateVariableAllowedValueRange volumeRange =
|
|
||||||
getService("RenderingControl").getStateVariable("Volume")
|
|
||||||
.getTypeDetails().getAllowedValueRange();
|
|
||||||
mMinVolume = volumeRange.getMinimum();
|
|
||||||
mMaxVolume = volumeRange.getMaximum();
|
|
||||||
mVolumeStep = volumeRange.getStep();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mMinVolume = 0;
|
|
||||||
mMaxVolume = 100;
|
|
||||||
mVolumeStep = 1;
|
|
||||||
}
|
|
||||||
// Hack, needed as using a smaller step seems to not
|
|
||||||
// increase volume on some devices.
|
|
||||||
mVolumeStep = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Seeks to the given absolute time in seconds.
|
* Seeks to the given absolute time in seconds.
|
||||||
*/
|
*/
|
||||||
|
|
Reference in a new issue