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 
17 package android.test;
18 
19 import com.google.android.collect.Lists;
20 
21 import android.accounts.AccountManager;
22 import android.accounts.AccountManagerCallback;
23 import android.accounts.AccountManagerFuture;
24 import android.accounts.AuthenticatorException;
25 import android.accounts.OnAccountsUpdateListener;
26 import android.accounts.OperationCanceledException;
27 import android.accounts.Account;
28 import android.content.ContextWrapper;
29 import android.content.ContentResolver;
30 import android.content.Intent;
31 import android.content.Context;
32 import android.content.ServiceConnection;
33 import android.content.BroadcastReceiver;
34 import android.content.IntentFilter;
35 import android.content.pm.PackageManager;
36 import android.net.Uri;
37 import android.os.Handler;
38 
39 import java.io.File;
40 import java.io.IOException;
41 import java.util.concurrent.TimeUnit;
42 import java.util.List;
43 
44 
45 /**
46  * A mock context which prevents its users from talking to the rest of the device while
47  * stubbing enough methods to satify code that tries to talk to other packages.
48  *
49  * @deprecated New tests should be written using the
50  * <a href="{@docRoot}tools/testing-support-library/index.html">Android Testing Support Library</a>.
51  */
52 @Deprecated
53 public class IsolatedContext extends ContextWrapper {
54 
55     private ContentResolver mResolver;
56     private final MockAccountManager mMockAccountManager;
57 
58     private List<Intent> mBroadcastIntents = Lists.newArrayList();
59 
IsolatedContext( ContentResolver resolver, Context targetContext)60     public IsolatedContext(
61             ContentResolver resolver, Context targetContext) {
62         super(targetContext);
63         mResolver = resolver;
64         mMockAccountManager = new MockAccountManager();
65     }
66 
67     /** Returns the list of intents that were broadcast since the last call to this method. */
getAndClearBroadcastIntents()68     public List<Intent> getAndClearBroadcastIntents() {
69         List<Intent> intents = mBroadcastIntents;
70         mBroadcastIntents = Lists.newArrayList();
71         return intents;
72     }
73 
74     @Override
getContentResolver()75     public ContentResolver getContentResolver() {
76         // We need to return the real resolver so that MailEngine.makeRight can get to the
77         // subscribed feeds provider. TODO: mock out subscribed feeds too.
78         return mResolver;
79     }
80 
81     @Override
bindService(Intent service, ServiceConnection conn, int flags)82     public boolean bindService(Intent service, ServiceConnection conn, int flags) {
83         return false;
84     }
85 
86     @Override
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)87     public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
88         return null;
89     }
90 
91     @Override
unregisterReceiver(BroadcastReceiver receiver)92     public void unregisterReceiver(BroadcastReceiver receiver) {
93         // Ignore
94     }
95 
96     @Override
sendBroadcast(Intent intent)97     public void sendBroadcast(Intent intent) {
98         mBroadcastIntents.add(intent);
99     }
100 
101     @Override
sendOrderedBroadcast(Intent intent, String receiverPermission)102     public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
103         mBroadcastIntents.add(intent);
104     }
105 
106     @Override
checkUriPermission( Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags)107     public int checkUriPermission(
108             Uri uri, String readPermission, String writePermission, int pid,
109             int uid, int modeFlags) {
110         return PackageManager.PERMISSION_GRANTED;
111     }
112 
113     @Override
checkUriPermission(Uri uri, int pid, int uid, int modeFlags)114     public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
115         return PackageManager.PERMISSION_GRANTED;
116     }
117 
118     @Override
getSystemService(String name)119     public Object getSystemService(String name) {
120         if (Context.ACCOUNT_SERVICE.equals(name)) {
121             return mMockAccountManager;
122         }
123         // No other services exist in this context.
124         return null;
125     }
126 
127     private class MockAccountManager extends AccountManager {
MockAccountManager()128         public MockAccountManager() {
129             super(IsolatedContext.this, null /* IAccountManager */, null /* handler */);
130         }
131 
addOnAccountsUpdatedListener(OnAccountsUpdateListener listener, Handler handler, boolean updateImmediately)132         public void addOnAccountsUpdatedListener(OnAccountsUpdateListener listener,
133                 Handler handler, boolean updateImmediately) {
134             // do nothing
135         }
136 
getAccounts()137         public Account[] getAccounts() {
138             return new Account[]{};
139         }
140 
getAccountsByTypeAndFeatures( final String type, final String[] features, AccountManagerCallback<Account[]> callback, Handler handler)141         public AccountManagerFuture<Account[]> getAccountsByTypeAndFeatures(
142                 final String type, final String[] features,
143                 AccountManagerCallback<Account[]> callback, Handler handler) {
144             return new MockAccountManagerFuture<Account[]>(new Account[0]);
145         }
146 
blockingGetAuthToken(Account account, String authTokenType, boolean notifyAuthFailure)147         public String blockingGetAuthToken(Account account, String authTokenType,
148                 boolean notifyAuthFailure)
149                 throws OperationCanceledException, IOException, AuthenticatorException {
150             return null;
151         }
152 
153 
154         /**
155          * A very simple AccountManagerFuture class
156          * that returns what ever was passed in
157          */
158         private class MockAccountManagerFuture<T>
159                 implements AccountManagerFuture<T> {
160 
161             T mResult;
162 
MockAccountManagerFuture(T result)163             public MockAccountManagerFuture(T result) {
164                 mResult = result;
165             }
166 
cancel(boolean mayInterruptIfRunning)167             public boolean cancel(boolean mayInterruptIfRunning) {
168                 return false;
169             }
170 
isCancelled()171             public boolean isCancelled() {
172                 return false;
173             }
174 
isDone()175             public boolean isDone() {
176                 return true;
177             }
178 
getResult()179             public T getResult()
180                     throws OperationCanceledException, IOException, AuthenticatorException {
181                 return mResult;
182             }
183 
getResult(long timeout, TimeUnit unit)184             public T getResult(long timeout, TimeUnit unit)
185                     throws OperationCanceledException, IOException, AuthenticatorException {
186                 return getResult();
187             }
188         }
189 
190     }
191 
192     @Override
getFilesDir()193     public File getFilesDir() {
194         return new File("/dev/null");
195     }
196 }
197