/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at
* src/com/vodafone360/people/VODAFONE.LICENSE.txt or
* http://github.com/360/360-Engine-for-Android
* See the License for the specific language governing permissions and
* limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each file and
* include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt.
* If applicable, add the following below this CDDL HEADER, with the fields
* enclosed by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
* Copyright 2010 Vodafone Sales & Services Ltd. All rights reserved.
* Use is subject to license terms.
*/
package com.vodafone360.people.engine.activities;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.os.Handler;
import android.provider.CallLog.Calls;
import com.vodafone360.people.database.tables.ActivitiesTable;
import com.vodafone360.people.database.tables.ActivitiesTable.TimelineNativeTypes;
import com.vodafone360.people.utils.LogUtils;
/**
* Allow ActivitiesEngine to 'watch' for changes in the Native call and message
* logs allowing re-sync of events if required.
*/
public class TimelineEventWatcher {
private ActivitiesEngine mEngine;
private ContentResolver mCr;
/**
* ContentObserver derived class that allows ActivitiesEngine to receive
* notifications of changes in call and message logs - thus prompting a
* sync. of these events.
*/
private class TimelineContentObserver extends ContentObserver {
/**
* Type of the native event detected: phone call or SMS, @see TimelineNativeTypes
*/
private ActivitiesTable.TimelineNativeTypes mType;
public TimelineContentObserver(ActivitiesTable.TimelineNativeTypes type) {
super(new Handler());
mType = type;
}
/**
* Notification of a change event in the content we are observing.
* Request an Activities sync. event.
*/
@Override
public void onChange(boolean selfChange) {
LogUtils.logV("TimelineEventWatcher.TimelineContentObserver.onChange()");
if (!selfChange) {
LogUtils.logV("TimelineEventWatcher.TimelineContentObserver.onChange() - request activity sync");
if (mType == TimelineNativeTypes.CallLog) {
mEngine.addGetNewPhonesCallsRequest();
} else {
mEngine.addGetNewSMSRequest();
}
}
}
}
private TimelineContentObserver mCallLogObserver;
private TimelineContentObserver mSmsObserver;
private TimelineContentObserver mMmsObserver;
/**
* Constructor. Creates observers to listen for changes in Native call and
* message logs.
*
* @param context Context - use RemoteService's Context.
* @param engine Handle to ActivitiesEngine.
*/
TimelineEventWatcher(Context context, ActivitiesEngine engine) {
mEngine = engine;
mCr = context.getContentResolver();
mCallLogObserver = new TimelineContentObserver(ActivitiesTable.TimelineNativeTypes.CallLog);
mSmsObserver = new TimelineContentObserver(ActivitiesTable.TimelineNativeTypes.SmsLog);
mMmsObserver = new TimelineContentObserver(ActivitiesTable.TimelineNativeTypes.MmsLog);
}
/**
* Register ContentObservers to listen for Call, SMS, MMS events.
*/
void startWatching() {
mCr.registerContentObserver(Calls.CONTENT_URI, true, mCallLogObserver);
mCr.registerContentObserver(FetchSmsLogEvents.SMS_CONTENT_URI, true, mSmsObserver);
mCr.registerContentObserver(MmsDecoder.MMS_CONTENT_URI, true, mMmsObserver);
}
/**
* Un-register ContentObservers.
*/
void stopWatching() {
mCr.unregisterContentObserver(mCallLogObserver);
mCr.unregisterContentObserver(mSmsObserver);
mCr.unregisterContentObserver(mMmsObserver);
}
}