1340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk/*
2340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk * Copyright (C) 2017 The Android Open Source Project
3340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk *
4340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk * except in compliance with the License. You may obtain a copy of the License at
6340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk *
7340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk *      http://www.apache.org/licenses/LICENSE-2.0
8340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk *
9340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk * Unless required by applicable law or agreed to in writing, software distributed under the
10340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk * KIND, either express or implied. See the License for the specific language governing
12340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk * permissions and limitations under the License.
13340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk */
14340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
15340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkpackage com.android.systemui;
16340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
17340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport static org.mockito.Mockito.mock;
18340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
19340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.content.Context;
20340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.util.ArrayMap;
21340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
22340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkpublic class TestableDependency extends Dependency {
23340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    private final ArrayMap<Object, Object> mObjs = new ArrayMap<>();
24340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
25340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public TestableDependency(Context context) {
26340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        mContext = context;
27340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        if (SystemUIFactory.getInstance() == null) {
28340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk            SystemUIFactory.createFromConfig(context);
29340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        }
30340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        start();
31340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
32340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
33340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public <T> T injectMockDependency(Class<T> cls) {
34340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        final T mock = mock(cls);
35340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        injectTestDependency(cls, mock);
36340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        return mock;
37340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
38340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
39340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public <T> void injectTestDependency(DependencyKey<T> key, T obj) {
40340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        mObjs.put(key, obj);
41340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
42340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
43340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public <T> void injectTestDependency(Class<T> key, T obj) {
44340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        mObjs.put(key, obj);
45340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
46340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
47340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    @Override
48340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    protected <T> T createDependency(Object key) {
49340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        if (mObjs.containsKey(key)) return (T) mObjs.get(key);
50340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        return super.createDependency(key);
51340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
52340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk}
53