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 android.content.Context;
18340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.LeakCheck;
19340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.TestableContext;
20340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.util.ArrayMap;
21340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
22340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkpublic class SysuiTestableContext extends TestableContext implements SysUiServiceProvider {
23340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
24340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    private ArrayMap<Class<?>, Object> mComponents;
25340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
26340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public SysuiTestableContext(Context base) {
27340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        super(base);
28340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
29340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
30340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public SysuiTestableContext(Context base, LeakCheck check) {
31340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        super(base, check);
32340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
33340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
34340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    @SuppressWarnings("unchecked")
35340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public <T> T getComponent(Class<T> interfaceType) {
36340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        return (T) (mComponents != null ? mComponents.get(interfaceType) : null);
37340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
38340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk
39340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public <T, C extends T> void putComponent(Class<T> interfaceType, C component) {
40340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        if (mComponents == null) mComponents = new ArrayMap<>();
41340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk        mComponents.put(interfaceType, component);
42340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    }
43340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk}
44