1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.chrome.browser.sync;
6
7import android.app.Application;
8import android.app.Service;
9import android.content.Context;
10import android.content.Intent;
11import android.os.IBinder;
12
13public abstract class ChromiumSyncAdapterService extends Service {
14    private static ChromiumSyncAdapter sSyncAdapter = null;
15    private static final Object LOCK = new Object();
16
17    /**
18     * Get the sync adapter reference, creating an instance if necessary.
19     */
20    private ChromiumSyncAdapter getOrCreateSyncAdapter(Context applicationContext) {
21        synchronized (LOCK) {
22            if (sSyncAdapter == null) {
23                sSyncAdapter = createChromiumSyncAdapter(applicationContext, getApplication());
24            }
25        }
26        return sSyncAdapter;
27    }
28
29    @Override
30    public IBinder onBind(Intent intent) {
31        return getOrCreateSyncAdapter(getApplicationContext()).getSyncAdapterBinder();
32    }
33
34    protected abstract ChromiumSyncAdapter createChromiumSyncAdapter(Context applicationContext,
35                                                                     Application application);
36}
37