package net.everythingandroid.smspopup.service;
import net.everythingandroid.smspopup.BuildConfig;
import net.everythingandroid.smspopup.util.Log;
import net.everythingandroid.smspopup.util.ManageNotification;
import net.everythingandroid.smspopup.util.SmsPopupUtils;
import android.app.Service;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
public class SmsMonitorService extends Service {
private static Uri uriSMS = Uri.parse("content://mms-sms/conversations/");
// private static final Uri SMS_CONTENT_URI = Uri.parse("content://sms");
// private static final Uri SMS_INBOX_CONTENT_URI =
// Uri.withAppendedPath(SMS_CONTENT_URI, "inbox");
private ContentResolver crSMS;
private SmsContentObserver observerSMS = null;
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
if (BuildConfig.DEBUG) Log.v("SmsMonitorService created");
registerSMSObserver();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
@Override
public void onDestroy() {
unregisterSMSObserver();
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
/*
* Registers the observer for SMS changes
*/
private void registerSMSObserver() {
if (observerSMS == null) {
observerSMS = new SmsContentObserver(new Handler());
crSMS = getContentResolver();
crSMS.registerContentObserver(uriSMS, true, observerSMS);
if (BuildConfig.DEBUG) Log.v("SMS Observer registered.");
}
}
/**
* Unregisters the observer for call log changes
*/
private void unregisterSMSObserver() {
if (crSMS != null) {
crSMS.unregisterContentObserver(observerSMS);
}
if (observerSMS != null) {
observerSMS = null;
}
if (BuildConfig.DEBUG) Log.v("Unregistered SMS Observer");
}
private class SmsContentObserver extends ContentObserver {
public SmsContentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// Cursor c = context.getContentResolver().query(SMS_CONTENT_URI,
// null, "read = 0", null, null);
int count = SmsPopupUtils.getUnreadMessagesCount(context);
if (BuildConfig.DEBUG) Log.v("getUnreadCount = " + count);
if (count == 0) {
ManageNotification.clearAll(context);
finishStartingService(SmsMonitorService.this);
} else {
// TODO: do something with count>0, maybe refresh the
// notification
}
}
}
/**
* Start the service to process that will run the content observer
*/
public static void beginStartingService(Context context) {
if (BuildConfig.DEBUG) Log.v("SmsMonitorService: beginStartingService()");
context.startService(new Intent(context, SmsMonitorService.class));
}
/**
* Called back by the service when it has finished processing notifications,
* releasing the wake lock if the service is now stopping.
*/
public static void finishStartingService(Service service) {
if (BuildConfig.DEBUG) Log.v("SmsMonitorService: finishStartingService()");
service.stopSelf();
}
}