127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov/*
227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov *
427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * you may not use this file except in compliance with the License.
627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * You may obtain a copy of the License at
727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov *
827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov *
1027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
1127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
1227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * See the License for the specific language governing permissions and
1427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * limitations under the License.
1527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov */
1627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov
1727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovpackage com.android.contacts.tests.mocks;
1827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov
1959a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerdaimport com.android.contacts.model.AccountTypeManager;
2059a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda
2127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.content.ContentResolver;
2227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.content.Context;
2327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.content.ContextWrapper;
24b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawaimport android.content.Intent;
2529996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikovimport android.content.pm.PackageManager;
2629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikovimport android.content.pm.ProviderInfo;
2727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.provider.ContactsContract;
2827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.provider.Settings;
2927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.test.mock.MockContentResolver;
3027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov
3127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov/**
3229996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov * A mock context for contacts unit tests. Forwards everything to
3327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * a supplied context, except content resolver operations, which are sent
3427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * to mock content providers.
3527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov */
3627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovpublic class ContactsMockContext extends ContextWrapper {
3729996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov    private ContactsMockPackageManager mPackageManager;
3827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    private MockContentResolver mContentResolver;
3927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    private MockContentProvider mContactsProvider;
4027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    private MockContentProvider mSettingsProvider;
4159a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda    private MockAccountTypeManager mMockAccountTypeManager;
42b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa    private Intent mIntentForStartActivity;
4327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov
4427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    public ContactsMockContext(Context base) {
4527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        super(base);
4629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov        mPackageManager = new ContactsMockPackageManager();
4727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        mContentResolver = new MockContentResolver();
4827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        mContactsProvider = new MockContentProvider();
4927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        mContentResolver.addProvider(ContactsContract.AUTHORITY, mContactsProvider);
5029996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov        mContactsProvider.attachInfo(this, new ProviderInfo());
5127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        mSettingsProvider = new MockContentProvider();
5229996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov        mSettingsProvider.attachInfo(this, new ProviderInfo());
5327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider);
5427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    }
5527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov
5659a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda    public void setMockAccountTypeManager(MockAccountTypeManager mockAccountTypeManager) {
5759a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda        mMockAccountTypeManager = mockAccountTypeManager;
5859a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda    }
5959a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda
6027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    @Override
6127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    public ContentResolver getContentResolver() {
6227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        return mContentResolver;
6327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    }
6427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov
6527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    public MockContentProvider getContactsProvider() {
6627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        return mContactsProvider;
6727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    }
6827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov
6927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    public MockContentProvider getSettingsProvider() {
7027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov        return mSettingsProvider;
7127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov    }
7274a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann
7374a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann    @Override
7429996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov    public PackageManager getPackageManager() {
7529996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov        return mPackageManager;
7629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov    }
7729996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov
7829996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov    @Override
7974a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann    public Context getApplicationContext() {
8074a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann        return this;
8174a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann    }
8229996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov
83b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa    /**
84b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa     * Instead of actually sending Intent, this method just remembers what Intent was supplied last.
85b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa     * You can check the content via {@link #getIntentForStartActivity()} for verification.
86b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa     */
87b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa    @Override
88b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa    public void startActivity(Intent intent) {
89b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa        mIntentForStartActivity = intent;
90b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa    }
91b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa
92b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa    public Intent getIntentForStartActivity() {
93b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa        return mIntentForStartActivity;
94b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa    }
95b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa
9629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov    public void verify() {
9729996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov        mContactsProvider.verify();
9829996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov        mSettingsProvider.verify();
9929996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov    }
10059a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda
10159a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda    @Override
10259a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda    public Object getSystemService(String name) {
10359a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda        if (AccountTypeManager.ACCOUNT_TYPE_SERVICE.equals(name)) {
10459a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda           return mMockAccountTypeManager;
10559a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda        }
10659a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda        return super.getSystemService(name);
10759a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda    }
10827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov}
109