blob: f792d7d11e157a37a30f3d8014031bc2edca4856 [file] [log] [blame]
Jason Monk340b0e52017-03-08 14:57:56 -05001/*
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 android.content.Context;
18import android.testing.LeakCheck;
19import android.testing.TestableContext;
20import android.util.ArrayMap;
Jeff Chang2aaa91a2018-11-08 18:04:16 +080021import android.view.Display;
Jason Monk340b0e52017-03-08 14:57:56 -050022
23public class SysuiTestableContext extends TestableContext implements SysUiServiceProvider {
24
25 private ArrayMap<Class<?>, Object> mComponents;
26
27 public SysuiTestableContext(Context base) {
28 super(base);
Jason Monk297c04e2018-08-23 17:16:59 -040029 setTheme(R.style.Theme_SystemUI);
Jason Monk340b0e52017-03-08 14:57:56 -050030 }
31
32 public SysuiTestableContext(Context base, LeakCheck check) {
33 super(base, check);
Jason Monk297c04e2018-08-23 17:16:59 -040034 setTheme(R.style.Theme_SystemUI);
Jason Monk340b0e52017-03-08 14:57:56 -050035 }
36
Jason Monkd4afe152017-05-01 15:37:43 -040037 public ArrayMap<Class<?>, Object> getComponents() {
38 if (mComponents == null) mComponents = new ArrayMap<>();
39 return mComponents;
40 }
41
Jason Monk340b0e52017-03-08 14:57:56 -050042 @SuppressWarnings("unchecked")
43 public <T> T getComponent(Class<T> interfaceType) {
44 return (T) (mComponents != null ? mComponents.get(interfaceType) : null);
45 }
46
47 public <T, C extends T> void putComponent(Class<T> interfaceType, C component) {
48 if (mComponents == null) mComponents = new ArrayMap<>();
49 mComponents.put(interfaceType, component);
50 }
Jeff Chang2aaa91a2018-11-08 18:04:16 +080051
52 @Override
53 public Context createDisplayContext(Display display) {
54 if (display == null) {
55 throw new IllegalArgumentException("display must not be null");
56 }
57
58 SysuiTestableContext context =
59 new SysuiTestableContext(getBaseContext().createDisplayContext(display));
60 return context;
61 }
Jason Monk340b0e52017-03-08 14:57:56 -050062}