background daemon doesn't start automatically if there are no enabled accounts. fixed #443 fixed #442

iNPUTmice created

Change summary

src/eu/siacs/conversations/persistance/DatabaseBackend.java | 10 ++++++
src/eu/siacs/conversations/services/EventReceiver.java      |  5 ++
2 files changed, 13 insertions(+), 2 deletions(-)

Detailed changes

src/eu/siacs/conversations/persistance/DatabaseBackend.java 🔗

@@ -32,7 +32,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
 			+ ") ON DELETE CASCADE, UNIQUE(" + Contact.ACCOUNT + ", "
 			+ Contact.JID + ") ON CONFLICT REPLACE);";
 
-	public DatabaseBackend(Context context) {
+	private DatabaseBackend(Context context) {
 		super(context, DATABASE_NAME, null, DATABASE_VERSION);
 	}
 
@@ -221,6 +221,14 @@ public class DatabaseBackend extends SQLiteOpenHelper {
 		String[] args = { account.getUuid() };
 		db.delete(Account.TABLENAME, Account.UUID + "=?", args);
 	}
+	
+	public boolean hasEnabledAccounts() {
+		SQLiteDatabase db = this.getReadableDatabase();
+		Cursor cursor= db.rawQuery("select count("+Account.UUID+")  from "+Account.TABLENAME+" where not options & (1 <<1)", null);
+		cursor.moveToFirst();
+		int count = cursor.getInt(0);
+		return (count>0);
+	}
 
 	@Override
 	public SQLiteDatabase getWritableDatabase() {

src/eu/siacs/conversations/services/EventReceiver.java 🔗

@@ -1,5 +1,6 @@
 package eu.siacs.conversations.services;
 
+import eu.siacs.conversations.persistance.DatabaseBackend;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -14,7 +15,9 @@ public class EventReceiver extends BroadcastReceiver {
 		} else {
 			mIntentForService.setAction("other");
 		}
-		context.startService(mIntentForService);
+		if (intent.getAction().equals("ui") || DatabaseBackend.getInstance(context).hasEnabledAccounts()) {
+			context.startService(mIntentForService);
+		}
 	}
 
 }