blob: 5c6616980c663c0da807738fd57a77bfbd1aa600 [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;
6import android.accounts.OnAccountsUpdatedListener;
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;
18import android.os.Looper;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080019
20import java.util.List;
Ken Shirriff3b95f532009-07-06 10:45:38 -070021import java.io.File;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080022
23/**
24 * A mock context which prevents its users from talking to the rest of the device while
25 * stubbing enough methods to satify code that tries to talk to other packages.
26 */
27public class IsolatedContext extends ContextWrapper {
28
29 private ContentResolver mResolver;
Fred Quintana0eabf022009-04-27 15:08:17 -070030 private final MockAccountManager mMockAccountManager;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080031
32 private List<Intent> mBroadcastIntents = Lists.newArrayList();
33
34 public IsolatedContext(
35 ContentResolver resolver, Context targetContext) {
36 super(targetContext);
37 mResolver = resolver;
Fred Quintana0eabf022009-04-27 15:08:17 -070038 mMockAccountManager = new MockAccountManager();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080039 }
40
41 /** Returns the list of intents that were broadcast since the last call to this method. */
42 public List<Intent> getAndClearBroadcastIntents() {
43 List<Intent> intents = mBroadcastIntents;
44 mBroadcastIntents = Lists.newArrayList();
45 return intents;
46 }
47
48 @Override
49 public ContentResolver getContentResolver() {
50 // We need to return the real resolver so that MailEngine.makeRight can get to the
51 // subscribed feeds provider. TODO: mock out subscribed feeds too.
52 return mResolver;
53 }
54
55 @Override
56 public boolean bindService(Intent service, ServiceConnection conn, int flags) {
57 return false;
58 }
59
60 @Override
61 public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
62 return null;
63 }
64
65 @Override
66 public void sendBroadcast(Intent intent) {
67 mBroadcastIntents.add(intent);
68 }
69
70 @Override
71 public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
72 mBroadcastIntents.add(intent);
73 }
74
75 @Override
76 public int checkUriPermission(
77 Uri uri, String readPermission, String writePermission, int pid,
78 int uid, int modeFlags) {
79 return PackageManager.PERMISSION_GRANTED;
80 }
81
82 @Override
83 public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
84 return PackageManager.PERMISSION_GRANTED;
85 }
86
87 @Override
88 public Object getSystemService(String name) {
Fred Quintana0eabf022009-04-27 15:08:17 -070089 if (Context.ACCOUNT_SERVICE.equals(name)) {
90 return mMockAccountManager;
91 }
92 // No other services exist in this context.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080093 return null;
94 }
95
Fred Quintana0eabf022009-04-27 15:08:17 -070096 private class MockAccountManager extends AccountManager {
97 public MockAccountManager() {
98 super(IsolatedContext.this, null /* IAccountManager */, null /* handler */);
99 }
100
101 public void addOnAccountsUpdatedListener(OnAccountsUpdatedListener listener,
102 Handler handler, boolean updateImmediately) {
103 // do nothing
104 }
Cynthia Wong904de612009-09-03 10:06:55 -0700105
106 public Account[] getAccounts() {
107 return new Account[]{};
108 }
Fred Quintana0eabf022009-04-27 15:08:17 -0700109 }
Ken Shirriff3b95f532009-07-06 10:45:38 -0700110 @Override
111 public File getFilesDir() {
112 return new File("/dev/null");
113 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800114}