package com.aberdyne.droidnavi.client;
import java.util.Date;
import android.content.ContentResolver;
import android.content.Context;
import pctelelog.ContactInfo;
import pctelelog.events.CallEndedEvent;
import pctelelog.events.IncomingCallEvent;
import pctelelog.events.MissedCallEvent;
public class PhoneStateListener extends PhonecallReceiver {
private EventDispatchThread m_dispatchThread = null;
/**
* Default Constructor
* @param dispatch
* @param resolver A content resolver from a context.
* this is only used during initialization to check missed calls.
*/
public PhoneStateListener(EventDispatchThread dispatch, ContentResolver resolver) {
assert dispatch != null;
m_dispatchThread = dispatch;
}
@Override
protected void onIncomingCallStarted(String number, Date start) {
ContactInfo info = ContactInfoPoller.pollInfo(savedContext, number);
IncomingCallEvent event = new IncomingCallEvent(start, info);
m_dispatchThread.dispatchEvent(event);
}
@Override
protected void onOutgoingCallStarted(String number, Date start) {}
@Override
protected void onIncomingCallEnded(String number, Date start, Date end) {
ContactInfo info = ContactInfoPoller.pollInfo(savedContext, number);
CallEndedEvent event = new CallEndedEvent(end, info);
m_dispatchThread.dispatchEvent(event);
}
@Override
protected void onOutgoingCallEnded(String number, Date start, Date end) {}
@Override
protected void onMissedCall(String number, Date start) {
// Retrieve the caller's contact info
ContactInfo info = ContactInfoPoller.pollInfo(savedContext, number);
if(info != null) {
MissedCallEvent event = new MissedCallEvent(start, info);
m_dispatchThread.dispatchEvent(event);
}
}
/**
* Call back for UnreadMissedCallTimer.
*
* The timer will call this every time it finds an unread missed call
* in the call log. This will occur until the "unread" status is cleared
* by the user by checking the log.
*
* @param number A phone number for the missed caller
* @param start A date for when the call was missed
* @param context A context to user for resolving ContactInfo
*/
protected void onUnreadMissedCall(String number, Date start, Context context) {
// Retrieve the caller's contact info
ContactInfo info = ContactInfoPoller.pollInfo(context, number);
if(info != null) {
MissedCallEvent event = new MissedCallEvent(start, info);
m_dispatchThread.dispatchEvent(event);
}
}
}