ContactsApplication.java revision 072d91171c749f43b64900118e6f4dcbdd7b1097
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.content.SharedPreferences;
26import android.os.StrictMode;
27import android.preference.PreferenceManager;
28
29public final class ContactsApplication extends Application {
30
31    private static InjectedServices sInjectedServices;
32    private AccountTypeManager mAccountTypeManager;
33
34    /**
35     * Overrides the system services with mocks for testing.
36     */
37    public static void injectServices(InjectedServices services) {
38        sInjectedServices = services;
39    }
40
41    public static InjectedServices getInjectedServices() {
42        return sInjectedServices;
43    }
44
45    @Override
46    public ContentResolver getContentResolver() {
47        if (sInjectedServices != null) {
48            ContentResolver resolver = sInjectedServices.getContentResolver();
49            if (resolver != null) {
50                return resolver;
51            }
52        }
53        return super.getContentResolver();
54    }
55
56    @Override
57    public SharedPreferences getSharedPreferences(String name, int mode) {
58        if (sInjectedServices != null) {
59            SharedPreferences prefs = sInjectedServices.getSharedPreferences();
60            if (prefs != null) {
61                return prefs;
62            }
63        }
64
65        return super.getSharedPreferences(name, mode);
66    }
67
68    @Override
69    public Object getSystemService(String name) {
70        if (sInjectedServices != null) {
71            Object service = sInjectedServices.getSystemService(name);
72            if (service != null) {
73                return service;
74            }
75        }
76
77        if (AccountTypeManager.ACCOUNT_TYPE_SERVICE.equals(name)) {
78            if (mAccountTypeManager == null) {
79                mAccountTypeManager = AccountTypeManager.createAccountTypeManager(this);
80            }
81            return mAccountTypeManager;
82        }
83
84        return super.getSystemService(name);
85    }
86
87    @Override
88    public void onCreate() {
89        super.onCreate();
90
91        // Priming caches to placate the StrictMode police
92        Context context = getApplicationContext();
93        PreferenceManager.getDefaultSharedPreferences(context);
94        AccountTypeManager.getInstance(context);
95
96        StrictMode.setThreadPolicy(
97                new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
98    }
99}
100