Skip to content

Commit

Permalink
Increasing ringtone volume option (3/3)
Browse files Browse the repository at this point in the history
Change-Id: I40576dcc603c836d62e65fb144e2d920fd407826
  • Loading branch information
maniac103 committed Jun 2, 2012
1 parent 8f2c007 commit 0422aa1
Showing 1 changed file with 72 additions and 5 deletions.
77 changes: 72 additions & 5 deletions src/com/android/phone/Ringer.java
Expand Up @@ -16,6 +16,7 @@

package com.android.phone;

import android.content.ContentResolver;
import android.content.Context;
import android.media.AudioManager;
import android.media.Ringtone;
Expand Down Expand Up @@ -44,6 +45,7 @@ public class Ringer {

private static final int PLAY_RING_ONCE = 1;
private static final int STOP_RING = 3;
private static final int INCREASE_RING_VOLUME = 4;

private static final int VIBRATE_LENGTH = 1000; // ms
private static final int PAUSE_LENGTH = 1000; // ms
Expand All @@ -53,17 +55,22 @@ public class Ringer {

Ringtone mRingtone;
Vibrator mVibrator = new Vibrator();
AudioManager mAudioManager;
IPowerManager mPowerManager;
volatile boolean mContinueVibrating;
VibratorThread mVibratorThread;
Context mContext;
private Worker mRingThread;
private Handler mHandler;
private Handler mRingHandler;
private long mFirstRingEventTime = -1;
private long mFirstRingStartTime = -1;
private int mRingerVolumeSetting;
private int mRingIncreaseInterval;

Ringer(Context context) {
mContext = context;
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
mPowerManager = IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));
}

Expand Down Expand Up @@ -141,17 +148,42 @@ void ring() {
if (DBG) log("- starting vibrator...");
mVibratorThread.start();
}
AudioManager audioManager =
(AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);

if (audioManager.getStreamVolume(AudioManager.STREAM_RING) == 0) {
int ringerVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
if (ringerVolume == 0 && mRingerVolumeSetting <= 0) {
if (DBG) log("skipping ring because volume is zero");
return;
}

makeLooper();
mHandler.removeCallbacksAndMessages(null);
mRingHandler.removeCallbacksAndMessages(null);
if (mFirstRingEventTime < 0) {
ContentResolver cr = mContext.getContentResolver();
boolean increasing = Settings.System.getInt(cr,
Settings.System.INCREASING_RING, 0) == 1;

if (increasing) {
int minVolume = Settings.System.getInt(cr,
Settings.System.INCREASING_RING_MIN_VOLUME, 1);

mRingIncreaseInterval = Settings.System.getInt(cr,
Settings.System.INCREASING_RING_INTERVAL, 0);

mRingerVolumeSetting = ringerVolume;
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, minVolume, 0);
if (DBG) {
log("increasing ring is enabled, starting at " +
minVolume + "/" + ringerVolume);
}
if (mRingIncreaseInterval > 0) {
mHandler.sendEmptyMessageDelayed(
INCREASE_RING_VOLUME, mRingIncreaseInterval);
}
} else {
mRingerVolumeSetting = -1;
}

mFirstRingEventTime = SystemClock.elapsedRealtime();
mRingHandler.sendEmptyMessage(PLAY_RING_ONCE);
} else {
Expand All @@ -164,6 +196,9 @@ void ring() {
if (DBG) {
log("delaying ring by " + (mFirstRingStartTime - mFirstRingEventTime));
}
if (mRingerVolumeSetting > 0 && mRingIncreaseInterval == 0) {
mHandler.sendEmptyMessage(INCREASE_RING_VOLUME);
}
mRingHandler.sendEmptyMessageDelayed(PLAY_RING_ONCE,
mFirstRingStartTime - mFirstRingEventTime);
} else {
Expand All @@ -177,8 +212,7 @@ void ring() {
}

boolean shouldVibrate() {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
return audioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER);
return mAudioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER);
}

/**
Expand All @@ -195,6 +229,15 @@ void stopRing() {
// the other end of this binder call is in the system process.
}

if (mHandler != null) {
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
}
if (mRingerVolumeSetting >= 0) {
if (DBG) log("- stopRing: resetting ring volume to " + mRingerVolumeSetting);
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, mRingerVolumeSetting, 0);
mRingerVolumeSetting = -1;
}
if (mRingHandler != null) {
mRingHandler.removeCallbacksAndMessages(null);
Message msg = mRingHandler.obtainMessage(STOP_RING);
Expand Down Expand Up @@ -275,6 +318,30 @@ void setCustomRingtoneUri (Uri uri) {
}

private void makeLooper() {
if (mHandler == null) {
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case INCREASE_RING_VOLUME:
int ringerVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
if (mRingerVolumeSetting > 0 && ringerVolume < mRingerVolumeSetting) {
ringerVolume++;
if (DBG) {
log("increasing ring volume to " +
ringerVolume + "/" + mRingerVolumeSetting);
}
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, ringerVolume, 0);
if (mRingIncreaseInterval > 0) {
sendEmptyMessageDelayed(INCREASE_RING_VOLUME, mRingIncreaseInterval);
}
}
break;
}
}
};
}

if (mRingThread == null) {
mRingThread = new Worker("ringer");
mRingHandler = new Handler(mRingThread.getLooper()) {
Expand Down

0 comments on commit 0422aa1

Please sign in to comment.