blob: bf22e1b47aa7a6b99d2df7e1ee325c3f16d0c739 [file] [log] [blame]
/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.media;
import static android.media.VolumeProvider2.VOLUME_CONTROL_ABSOLUTE;
import static android.media.VolumeProvider2.VOLUME_CONTROL_FIXED;
import static android.media.VolumeProvider2.VOLUME_CONTROL_RELATIVE;
import android.media.VolumeProvider2;
import android.media.update.VolumeProvider2Provider;
public class VolumeProvider2Impl implements VolumeProvider2Provider {
private final VolumeProvider2 mInstance;
private final int mControlType;
private final int mMaxVolume;
private int mCurrentVolume;
private Callback mCallback;
public VolumeProvider2Impl(VolumeProvider2 instance,
@VolumeProvider2.ControlType int controlType, int maxVolume, int currentVolume) {
if (controlType != VOLUME_CONTROL_FIXED && controlType != VOLUME_CONTROL_RELATIVE
&& controlType != VOLUME_CONTROL_ABSOLUTE) {
throw new IllegalArgumentException("wrong controlType " + controlType);
}
if (maxVolume < 0 || currentVolume < 0) {
throw new IllegalArgumentException("volume shouldn't be negative"
+ ", maxVolume=" + maxVolume + ", currentVolume=" + currentVolume);
}
if (currentVolume > maxVolume) {
throw new IllegalArgumentException("currentVolume shouldn't be greater than maxVolume"
+ ", maxVolume=" + maxVolume + ", currentVolume=" + currentVolume);
}
mInstance = instance;
mControlType = controlType;
mMaxVolume = maxVolume;
mCurrentVolume = currentVolume;
}
@Override
public int getControlType_impl() {
return mControlType;
}
@Override
public int getMaxVolume_impl() {
return mMaxVolume;
}
@Override
public int getCurrentVolume_impl() {
return mCurrentVolume;
}
@Override
public void setCurrentVolume_impl(int currentVolume) {
if (currentVolume < 0) {
throw new IllegalArgumentException("currentVolume shouldn't be negative"
+ ", currentVolume=" + currentVolume);
}
mCurrentVolume = currentVolume;
if (mCallback != null) {
mCallback.onVolumeChanged(mInstance);
}
}
/**
* Sets a callback to receive volume changes.
*/
public void setCallback(Callback callback) {
mCallback = callback;
}
/**
* Listens for changes to the volume.
*/
public static abstract class Callback {
public abstract void onVolumeChanged(VolumeProvider2 volumeProvider);
}
}