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