blob: 485e45c957c99c261b837846ff474503a048a6ac [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001package android.test;
2
3import com.google.android.collect.Lists;
4
Fred Quintana0eabf022009-04-27 15:08:17 -07005import android.accounts.AccountManager;
Fred Quintanaf7ae77c2009-10-02 17:19:31 -07006import android.accounts.OnAccountsUpdateListener;
Cynthia Wong904de612009-09-03 10:06:55 -07007import android.accounts.Account;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08008import 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;
Fred Quintana0eabf022009-04-27 15:08:17 -070017import android.os.Handler;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080018
19import java.util.List;
Ken Shirriff3b95f532009-07-06 10:45:38 -070020import java.io.File;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080021
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;
Fred Quintana0eabf022009-04-27 15:08:17 -070029 private final MockAccountManager mMockAccountManager;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080030
31 private List<Intent> mBroadcastIntents = Lists.newArrayList();
32
33 public IsolatedContext(
34 ContentResolver resolver, Context targetContext) {
35 super(targetContext);
36 mResolver = resolver;
Fred Quintana0eabf022009-04-27 15:08:17 -070037 mMockAccountManager = new MockAccountManager();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080038 }
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) {
Fred Quintana0eabf022009-04-27 15:08:17 -070088 if (Context.ACCOUNT_SERVICE.equals(name)) {
89 return mMockAccountManager;
90 }
91 // No other services exist in this context.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080092 return null;
93 }
94
Fred Quintana0eabf022009-04-27 15:08:17 -070095 private class MockAccountManager extends AccountManager {
96 public MockAccountManager() {
97 super(IsolatedContext.this, null /* IAccountManager */, null /* handler */);
98 }
99
Fred Quintanaf7ae77c2009-10-02 17:19:31 -0700100 public void addOnAccountsUpdatedListener(OnAccountsUpdateListener listener,
Fred Quintana0eabf022009-04-27 15:08:17 -0700101 Handler handler, boolean updateImmediately) {
102 // do nothing
103 }
Cynthia Wong904de612009-09-03 10:06:55 -0700104
105 public Account[] getAccounts() {
106 return new Account[]{};
107 }
Fred Quintana0eabf022009-04-27 15:08:17 -0700108 }
Ken Shirriff3b95f532009-07-06 10:45:38 -0700109 @Override
110 public File getFilesDir() {
111 return new File("/dev/null");
112 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800113}