IsolatedContext.java revision 12093976a4842a795491cfd2b1d3b71e18503f2d
1package android.test;
2
3import com.google.android.collect.Lists;
4
5import android.accounts.AccountManager;
6import android.accounts.OnAccountsUpdateListener;
7import android.accounts.Account;
8import android.content.ContextWrapper;
9import android.content.ContentResolver;
10import android.content.Intent;
11import android.content.Context;
12import android.content.ServiceConnection;
13import android.content.BroadcastReceiver;
14import android.content.IntentFilter;
15import android.content.pm.PackageManager;
16import android.net.Uri;
17import android.os.Handler;
18
19import java.util.List;
20import java.io.File;
21
22/**
23     * A mock context which prevents its users from talking to the rest of the device while
24 * stubbing enough methods to satify code that tries to talk to other packages.
25 */
26public class IsolatedContext extends ContextWrapper {
27
28    private ContentResolver mResolver;
29    private final MockAccountManager mMockAccountManager;
30
31    private List<Intent> mBroadcastIntents = Lists.newArrayList();
32
33    public IsolatedContext(
34            ContentResolver resolver, Context targetContext) {
35        super(targetContext);
36        mResolver = resolver;
37        mMockAccountManager = new MockAccountManager();
38    }
39
40    /** Returns the list of intents that were broadcast since the last call to this method. */
41    public List<Intent> getAndClearBroadcastIntents() {
42        List<Intent> intents = mBroadcastIntents;
43        mBroadcastIntents = Lists.newArrayList();
44        return intents;
45    }
46
47    @Override
48    public ContentResolver getContentResolver() {
49        // We need to return the real resolver so that MailEngine.makeRight can get to the
50        // subscribed feeds provider. TODO: mock out subscribed feeds too.
51        return mResolver;
52    }
53
54    @Override
55    public boolean bindService(Intent service, ServiceConnection conn, int flags) {
56        return false;
57    }
58
59    @Override
60    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
61        return null;
62    }
63
64    @Override
65    public void sendBroadcast(Intent intent) {
66        mBroadcastIntents.add(intent);
67    }
68
69    @Override
70    public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
71        mBroadcastIntents.add(intent);
72    }
73
74    @Override
75    public int checkUriPermission(
76            Uri uri, String readPermission, String writePermission, int pid,
77            int uid, int modeFlags) {
78        return PackageManager.PERMISSION_GRANTED;
79    }
80
81    @Override
82    public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
83        return PackageManager.PERMISSION_GRANTED;
84    }
85
86    @Override
87    public Object getSystemService(String name) {
88        if (Context.ACCOUNT_SERVICE.equals(name)) {
89            return mMockAccountManager;
90        }
91        // No other services exist in this context.
92        return null;
93    }
94
95    private class MockAccountManager extends AccountManager {
96        public MockAccountManager() {
97            super(IsolatedContext.this, null /* IAccountManager */, null /* handler */);
98        }
99
100        public void addOnAccountsUpdatedListener(OnAccountsUpdateListener listener,
101                Handler handler, boolean updateImmediately) {
102            // do nothing
103        }
104
105        public Account[] getAccounts() {
106            return new Account[]{};
107        }
108    }
109    @Override
110    public File getFilesDir() {
111        return new File("/dev/null");
112    }
113}
114