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