11d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk/*
21d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * Copyright (C) 2017 The Android Open Source Project
31d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk *
41d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
51d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * except in compliance with the License. You may obtain a copy of the License at
61d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk *
71d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk *      http://www.apache.org/licenses/LICENSE-2.0
81d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk *
91d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * Unless required by applicable law or agreed to in writing, software distributed under the
101d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
111d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * KIND, either express or implied. See the License for the specific language governing
121d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * permissions and limitations under the License.
131d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk */
141d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
151d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkpackage com.android.systemui.statusbar.policy;
161d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
171d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.Map;
181d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Consumer;
191d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Supplier;
201d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
211d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk/**
221d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * Utility class used to select between a plugin, tuner settings, and a default implementation
231d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * of an interface.
241d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk */
251d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkpublic interface ExtensionController {
261d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
271d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    <T> ExtensionBuilder<T> newExtension(Class<T> cls);
281d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
291d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    interface Extension<T> {
301d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        T get();
311d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        void destroy();
32a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk        /**
33a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk         * Triggers the extension to cycle through each of the sources again because something
34a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk         * (like configuration) may have changed.
35a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk         */
36a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk        T reload();
371d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
381d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
391d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    interface ExtensionBuilder<T> {
401d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        ExtensionBuilder<T> withTunerFactory(TunerFactory<T> factory);
411d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls);
421d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls, String action);
431d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        <P> ExtensionBuilder<T> withPlugin(Class<P> cls, String action,
441d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk                PluginConverter<T, P> converter);
451d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        ExtensionBuilder<T> withDefault(Supplier<T> def);
461d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        ExtensionBuilder<T> withCallback(Consumer<T> callback);
471d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        Extension build();
481d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
491d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
501d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    public interface PluginConverter<T, P> {
511d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        T getInterfaceFromPlugin(P plugin);
521d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
531d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
541d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    public interface TunerFactory<T> {
551d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        String[] keys();
561d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        T create(Map<String, String> settings);
571d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
581d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk}
59