1ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk/* 2ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * Copyright (C) 2017 The Android Open Source Project 3ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * 4ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * except in compliance with the License. You may obtain a copy of the License at 6ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * 7ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 8ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * 9ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 10ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * KIND, either express or implied. See the License for the specific language governing 12ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk * permissions and limitations under the License. 13ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk */ 14ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 15ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monkpackage com.android.systemui.plugins; 16ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 17ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monkimport android.util.ArrayMap; 18ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 19ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monkimport com.android.systemui.Dependency; 20ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monkimport com.android.systemui.plugins.PluginDependency.DependencyProvider; 21ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 22ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monkpublic class PluginDependencyProvider extends DependencyProvider { 23ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 24ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk private final ArrayMap<Class<?>, Object> mDependencies = new ArrayMap<>(); 25ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk private final PluginManager mManager; 26ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 27ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk public PluginDependencyProvider(PluginManager manager) { 28ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk mManager = manager; 29ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk PluginDependency.sProvider = this; 30ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk } 31ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 32ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk public <T> void allowPluginDependency(Class<T> cls) { 33ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk allowPluginDependency(cls, Dependency.get(cls)); 34ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk } 35ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 36ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk public <T> void allowPluginDependency(Class<T> cls, T obj) { 3725f3db72a620b672b69681c1b8edf9f601020236Jason Monk synchronized (mDependencies) { 3825f3db72a620b672b69681c1b8edf9f601020236Jason Monk mDependencies.put(cls, obj); 3925f3db72a620b672b69681c1b8edf9f601020236Jason Monk } 40ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk } 41ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk 42ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk @Override 43ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk <T> T get(Plugin p, Class<T> cls) { 44ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk if (!mManager.dependsOn(p, cls)) { 45ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk throw new IllegalArgumentException(p.getClass() + " does not depend on " + cls); 46ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk } 4725f3db72a620b672b69681c1b8edf9f601020236Jason Monk synchronized (mDependencies) { 4825f3db72a620b672b69681c1b8edf9f601020236Jason Monk if (!mDependencies.containsKey(cls)) { 4925f3db72a620b672b69681c1b8edf9f601020236Jason Monk throw new IllegalArgumentException("Unknown dependency " + cls); 5025f3db72a620b672b69681c1b8edf9f601020236Jason Monk } 5125f3db72a620b672b69681c1b8edf9f601020236Jason Monk return (T) mDependencies.get(cls); 52ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk } 53ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk } 54ec34da8f6f31c5ee1e543c0c7999a067487e0ce9Jason Monk} 55