1/*
2 * Copyright (C) 2008 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 android.test;
18
19import android.accounts.AccountManager;
20import android.content.ContextWrapper;
21import android.content.ContentResolver;
22import android.content.Intent;
23import android.content.Context;
24import android.content.ServiceConnection;
25import android.content.BroadcastReceiver;
26import android.content.IntentFilter;
27import android.content.pm.PackageManager;
28import android.net.Uri;
29import android.test.mock.MockAccountManager;
30
31import java.io.File;
32import java.util.ArrayList;
33import java.util.List;
34
35
36/**
37 * A mock context which prevents its users from talking to the rest of the device while
38 * stubbing enough methods to satify code that tries to talk to other packages.
39 *
40 * @deprecated New tests should be written using the
41 * <a href="{@docRoot}tools/testing-support-library/index.html">Android Testing Support Library</a>.
42 */
43@Deprecated
44public class IsolatedContext extends ContextWrapper {
45
46    private ContentResolver mResolver;
47    private final AccountManager mMockAccountManager;
48
49    private List<Intent> mBroadcastIntents = new ArrayList<>();
50
51    public IsolatedContext(
52            ContentResolver resolver, Context targetContext) {
53        super(targetContext);
54        mResolver = resolver;
55        mMockAccountManager = MockAccountManager.newMockAccountManager(IsolatedContext.this);
56    }
57
58    /** Returns the list of intents that were broadcast since the last call to this method. */
59    public List<Intent> getAndClearBroadcastIntents() {
60        List<Intent> intents = mBroadcastIntents;
61        mBroadcastIntents = new ArrayList<>();
62        return intents;
63    }
64
65    @Override
66    public ContentResolver getContentResolver() {
67        // We need to return the real resolver so that MailEngine.makeRight can get to the
68        // subscribed feeds provider. TODO: mock out subscribed feeds too.
69        return mResolver;
70    }
71
72    @Override
73    public boolean bindService(Intent service, ServiceConnection conn, int flags) {
74        return false;
75    }
76
77    @Override
78    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
79        return null;
80    }
81
82    @Override
83    public void unregisterReceiver(BroadcastReceiver receiver) {
84        // Ignore
85    }
86
87    @Override
88    public void sendBroadcast(Intent intent) {
89        mBroadcastIntents.add(intent);
90    }
91
92    @Override
93    public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
94        mBroadcastIntents.add(intent);
95    }
96
97    @Override
98    public int checkUriPermission(
99            Uri uri, String readPermission, String writePermission, int pid,
100            int uid, int modeFlags) {
101        return PackageManager.PERMISSION_GRANTED;
102    }
103
104    @Override
105    public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
106        return PackageManager.PERMISSION_GRANTED;
107    }
108
109    @Override
110    public Object getSystemService(String name) {
111        if (Context.ACCOUNT_SERVICE.equals(name)) {
112            return mMockAccountManager;
113        }
114        // No other services exist in this context.
115        return null;
116    }
117
118    @Override
119    public File getFilesDir() {
120        return new File("/dev/null");
121    }
122}
123