/* * Copyright (c) 2013, Sorokin Alexander (uas.sorokin@gmail.com) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. The names of the authors may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.uas.media.aimp.utils; import com.uas.media.aimp.player.AimpPlayer; /** * User: uas.sorokin@gmail.com */ public class VolumeUpdater { public static final int DIRECTION_UP = 1; public static final int DIRECTION_DOWN = -1; private static final float VOLUME_KOEFF = 1.1f; private static final float VOLUME_INC = 2.6f; private static final long DELAY = 250; private float mVolumeKoeff = VOLUME_KOEFF; // addition to volume private boolean mIsActive = false; private AimpPlayer mAimpPlayer; private Updater tUpdater; public VolumeUpdater() { mIsActive = false; } public void start(AimpPlayer aimpPlayer, int direction) { if (mIsActive) { return; } mAimpPlayer = aimpPlayer; mIsActive = true; tUpdater = new Updater(direction); tUpdater.start(); } public void stop(AimpPlayer aimpPlayer) { if (!mIsActive) { return; } mAimpPlayer = aimpPlayer; mIsActive = false; tUpdater = null; } class Updater extends Thread { private final int mDirection; public Updater(int direction) { mDirection = direction; } @Override public void run() { while (mIsActive) { try { int volume = mAimpPlayer.getVolume() + mDirection*(int)mVolumeKoeff; if (volume > 100) { volume = 100; } if (volume < 0) { volume = 0; } mAimpPlayer.setVolume(volume); mVolumeKoeff += VOLUME_INC; Thread.sleep(DELAY); } catch (Exception e) { Logger.e(e.getMessage(), e); } } mVolumeKoeff = VOLUME_KOEFF; } } }