package me.barrasso.android.volume.media.conditions;
import android.media.AudioManager;
import static android.media.AudioManager.*;
import com.android.internal.util.Predicate;
/**
* Determines if {@link android.media.AudioManager} has a valid system volume.
*/
public class SystemVolume implements Predicate<AudioManager> {
/**
* @param manager AudioManager
* @return True if {@link android.media.AudioManager#STREAM_SYSTEM} exists.
*/
@Override
public boolean apply(AudioManager manager) {
// Remember the volumes that we started at.
final int systemVolume = manager.getStreamVolume(STREAM_SYSTEM);
final int[] streams = new int[] {
STREAM_RING, STREAM_MUSIC, STREAM_ALARM, STREAM_NOTIFICATION
};
for (int stream : streams) {
// Set each stream volume differently, see if system is linked.
final int prevVolume = manager.getStreamVolume(stream);
manager.setStreamVolume(STREAM_SYSTEM, 4, 0);
manager.setStreamVolume(stream, 2, 0);
final int newSystemVolume = manager.getStreamVolume(STREAM_SYSTEM);
final int newVolume = manager.getStreamVolume(stream);
manager.setStreamVolume(stream, prevVolume, 0);
if (newVolume == newSystemVolume) return false;
}
manager.setStreamVolume(STREAM_SYSTEM, systemVolume, 0);
return true;
}
}