1a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu/*
2a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * Copyright (C) 2016 Google Inc.
3a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu *
4a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * Licensed under the Apache License, Version 2.0 (the "License");
5a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * you may not use this file except in compliance with the License.
6a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * You may obtain a copy of the License at
7a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu *
8a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu *      http://www.apache.org/licenses/LICENSE-2.0
9a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu *
10a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * Unless required by applicable law or agreed to in writing, software
11a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * distributed under the License is distributed on an "AS IS" BASIS,
12a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * See the License for the specific language governing permissions and
14a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu * limitations under the License.
15a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu */
16a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxupackage com.android.carrierdefaultapp;
17a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
18a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.content.Context;
19a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.content.ContextWrapper;
20a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport android.util.Log;
21a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
22a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxuimport java.util.HashMap;
23a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
24a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxupublic class TestContext extends ContextWrapper {
25a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
26a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    private final String TAG = this.getClass().getSimpleName();
27a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
28a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    private HashMap<String, Object> mInjectedSystemServices = new HashMap<>();
29a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
30a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    public TestContext(Context base) {
31a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        super(base);
32a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    }
33a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
34a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    public <S> void injectSystemService(Class<S> cls, S service) {
35a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        final String name = getSystemServiceName(cls);
36a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        mInjectedSystemServices.put(name, service);
37a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    }
38a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
39a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    @Override
40a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    public Context getApplicationContext() {
41a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        return this;
42a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    }
43a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
44a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    @Override
45a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    public Object getSystemService(String name) {
46a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        if (mInjectedSystemServices.containsKey(name)) {
47a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu            Log.d(TAG, "return mocked system service for " + name);
48a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu            return mInjectedSystemServices.get(name);
49a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        }
50a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        Log.d(TAG, "return real system service for " + name);
51a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        return super.getSystemService(name);
52a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    }
53a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu
54a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    public static void waitForMs(long ms) {
55a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        try {
56a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu            Thread.sleep(ms);
57a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        } catch (InterruptedException e) {
58a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu        }
59a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu    }
60a21a87b7a4153839cebb3152d0003ee86d7a5252fionaxu}
61