package com.tomclaw.mandarin.core; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.ContentObserver; import com.tomclaw.mandarin.util.Logger; /** * Created by Igor on 16.05.2015. */ public class AccountsDispatcher { private Context context; private final ContentResolver contentResolver; private final AccountsObserver accountsObserver; private SessionHolder sessionHolder; private boolean hasActiveAccounts; public AccountsDispatcher(Context context, SessionHolder sessionHolder) { this.context = context; this.contentResolver = context.getContentResolver(); this.accountsObserver = new AccountsObserver(); this.sessionHolder = sessionHolder; } public void startObservation() { hasActiveAccounts = sessionHolder.hasActiveAccounts(); // Registering created observers. contentResolver.registerContentObserver( Settings.ACCOUNT_RESOLVER_URI, true, accountsObserver); accountsObserver.onChange(true); } private class AccountsObserver extends ContentObserver { /** * Creates a content observer. */ public AccountsObserver() { super(null); } @Override public void onChange(boolean selfChange) { Logger.log("AccountsObserver: onChange [selfChange = " + selfChange + "]"); boolean activeAccountsBefore = hasActiveAccounts; hasActiveAccounts = sessionHolder.hasActiveAccounts(); // Checking for connected conditions. if (!activeAccountsBefore && hasActiveAccounts) { Logger.log("AccountsObserver: account was connected. We must notify core service."); // Some account has connecting or connected. Intent serviceIntent = new Intent(context, CoreService.class) .putExtra(CoreService.EXTRA_ON_CONNECTED_EVENT, true); context.startService(serviceIntent); } } } }