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