// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.testshell.signin;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.signin.OAuth2TokenService;
import org.chromium.content.browser.BrowserStartupController;
import org.chromium.sync.signin.ChromeSigninController;

/**
 * A BroadcastReceiver for acting on changes to Android accounts.
 */
public class AccountsChangedReceiver extends BroadcastReceiver {
    private static final String TAG = "AccountsChangedReceiver";

    @Override
    public void onReceive(final Context context, Intent intent) {
        if (AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION.equals(intent.getAction())) {
            final Account signedInUser =
                    ChromeSigninController.get(context).getSignedInUser();
            if (signedInUser != null) {
                BrowserStartupController.StartupCallback callback =
                        new BrowserStartupController.StartupCallback() {
                    @Override
                    public void onSuccess(boolean alreadyStarted) {
                        OAuth2TokenService.getForProfile(Profile.getLastUsedProfile())
                                .validateAccounts(context);
                    }

                    @Override
                    public void onFailure() {
                        Log.w(TAG, "Failed to start browser process.");
                    }
                };
                startBrowserProcessOnUiThread(context, callback);
            }
        }
    }

    private static void startBrowserProcessOnUiThread(final Context context,
            final BrowserStartupController.StartupCallback callback) {
        ThreadUtils.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                BrowserStartupController.get(context).startBrowserProcessesAsync(callback);
            }
        });
    }
}