1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 *      http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.systemui;
16
17import static org.mockito.Mockito.mock;
18
19import android.content.Context;
20import android.util.ArrayMap;
21
22public class TestableDependency extends Dependency {
23    private final ArrayMap<Object, Object> mObjs = new ArrayMap<>();
24
25    public TestableDependency(Context context) {
26        mContext = context;
27        if (SystemUIFactory.getInstance() == null) {
28            SystemUIFactory.createFromConfig(context);
29        }
30        start();
31    }
32
33    public <T> T injectMockDependency(Class<T> cls) {
34        final T mock = mock(cls);
35        injectTestDependency(cls, mock);
36        return mock;
37    }
38
39    public <T> void injectTestDependency(DependencyKey<T> key, T obj) {
40        mObjs.put(key, obj);
41    }
42
43    public <T> void injectTestDependency(Class<T> key, T obj) {
44        mObjs.put(key, obj);
45    }
46
47    @Override
48    protected <T> T createDependency(Object key) {
49        if (mObjs.containsKey(key)) return (T) mObjs.get(key);
50        return super.createDependency(key);
51    }
52}
53