ContactsApplication.java revision 6f667b55687bf9193323802e8f3234f0ab254388
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.contacts;
18
19import com.android.contacts.model.AccountTypeManager;
20import com.android.contacts.test.InjectedServices;
21
22import android.app.Application;
23import android.content.ContentResolver;
24import android.content.Context;
25import android.os.StrictMode;
26import android.preference.PreferenceManager;
27
28public final class ContactsApplication extends Application {
29
30    private static InjectedServices sInjectedServices;
31    private AccountTypeManager mAccountTypeManager;
32
33    /**
34     * Overrides the system services with mocks for testing.
35     */
36    public static void injectServices(InjectedServices services) {
37        sInjectedServices = services;
38    }
39
40    @Override
41    public ContentResolver getContentResolver() {
42        if (sInjectedServices != null) {
43            ContentResolver resolver = sInjectedServices.getContentResolver();
44            if (resolver != null) {
45                return resolver;
46            }
47        }
48        return super.getContentResolver();
49    }
50
51    @Override
52    public Object getSystemService(String name) {
53        if (sInjectedServices != null) {
54            Object service = sInjectedServices.getSystemService(name);
55            if (service != null) {
56                return service;
57            }
58        }
59
60        if (AccountTypeManager.ACCOUNT_TYPE_SERVICE.equals(name)) {
61            if (mAccountTypeManager == null) {
62                mAccountTypeManager = AccountTypeManager.createAccountTypeManager(this);
63            }
64            return mAccountTypeManager;
65        }
66
67        return super.getSystemService(name);
68    }
69
70    @Override
71    public void onCreate() {
72        super.onCreate();
73
74        // Priming caches to placate the StrictMode police
75        Context context = getApplicationContext();
76        PreferenceManager.getDefaultSharedPreferences(context);
77        AccountTypeManager.getInstance(context);
78
79        StrictMode.setThreadPolicy(
80                new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
81    }
82}
83