Android Open Source - AUXManager Call State Listener






From Project

Back to project page AUXManager.

License

The source code is released under:

GNU General Public License

If you think the Android project AUXManager listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.easysoft.auxmanager.listener;
/*  ww  w  .ja va  2s.  c  o m*/

import android.media.AudioManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.easysoft.auxmanager.shared.Constants;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * Manages speaker behavior depended on phone call state
 * <p/>
 * <br/><i>Created at 2/16/14 2:03 AM, user: mishalov</i>
 *
 * @author Michael Mishalov
 * @since Android SDK 4.1, JDK 1.7
 */
public class CallStateListener extends PhoneStateListener {
    private AudioManager audioManager;
    private int callState;

    public CallStateListener(AudioManager audioManager, int callState) {
        super();
        this.audioManager = audioManager;
        this.callState =  callState;
    }

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        switch (callState) {
            case TelephonyManager.CALL_STATE_IDLE:
                if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                    Log.d(Constants.LOGGER_CONTEXT, "Idle => Off Hook = new outgoing call");
                } else if (state == TelephonyManager.CALL_STATE_RINGING) {
                    Log.d(Constants.LOGGER_CONTEXT, "Idle => Ringing = new incoming call (" + incomingNumber + ")");
                }
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                if (state == TelephonyManager.CALL_STATE_IDLE) {
                    ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
                    scheduler.schedule(new Runnable() {
                        @Override
                        public void run() {
                            audioManager.setMode(AudioManager.STREAM_MUSIC);
                            audioManager.setSpeakerphoneOn(true);
                            Log.d(Constants.LOGGER_CONTEXT, "Off Hook => Idle  = disconnected, speaker on");
                        }
                    },5, TimeUnit.SECONDS);

                } else if (state == TelephonyManager.CALL_STATE_RINGING) {
                    Log.d(Constants.LOGGER_CONTEXT, "Off Hook => Ringing = another call waiting (" + incomingNumber + ")");
                }
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                    audioManager.setSpeakerphoneOn(false);
                    Log.d(Constants.LOGGER_CONTEXT, "Ringing => Off Hook = received, speaker off");
                } else if (state == TelephonyManager.CALL_STATE_IDLE) {
                    Log.d(Constants.LOGGER_CONTEXT, "Ringing => Idle = missed call");
                }
                break;
            default:
        }
        callState = state;
    }

}




Java Source Code List

com.easysoft.auxmanager.activity.EditProfileActivity.java
com.easysoft.auxmanager.activity.MainActivity.java
com.easysoft.auxmanager.activity.adapter.ApplicationAdapter.java
com.easysoft.auxmanager.activity.adapter.ApplicationModel.java
com.easysoft.auxmanager.activity.profile.ProfileSharedData.java
com.easysoft.auxmanager.listener.CallStateListener.java
com.easysoft.auxmanager.receiver.HeadsetActionBroadcastReceiver.java
com.easysoft.auxmanager.receiver.NotificationActionBroadcastReceiver.java
com.easysoft.auxmanager.service.AUXManagerService.java
com.easysoft.auxmanager.shared.ActiveProfileActivitiesExecutor.java
com.easysoft.auxmanager.shared.Constants.java
com.easysoft.auxmanager.widget.AUXManagerWidgetProvider.java