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 170b80c4e518110ba385a1b83d1e29325f164dc90dJason Monkimport android.content.Context; 181d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 191d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.Map; 201d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Consumer; 211d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Supplier; 221d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 231d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk/** 241d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * Utility class used to select between a plugin, tuner settings, and a default implementation 251d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk * of an interface. 261d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk */ 271d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkpublic interface ExtensionController { 281d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 291d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk <T> ExtensionBuilder<T> newExtension(Class<T> cls); 301d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 311d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk interface Extension<T> { 321d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk T get(); 330b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk Context getContext(); 341d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk void destroy(); 350b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk void addCallback(Consumer<T> callback); 36a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk /** 37a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk * Triggers the extension to cycle through each of the sources again because something 38a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk * (like configuration) may have changed. 39a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk */ 40a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk T reload(); 413b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk 423b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk /** 433b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk * Null out the cached item for the purpose of memory saving, should only be done 443b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk * when any other references are already gotten. 453b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk * @param isDestroyed 463b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk */ 473b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk void clearItem(boolean isDestroyed); 481d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 491d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 501d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk interface ExtensionBuilder<T> { 511d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk ExtensionBuilder<T> withTunerFactory(TunerFactory<T> factory); 521d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls); 531d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls, String action); 541d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk <P> ExtensionBuilder<T> withPlugin(Class<P> cls, String action, 551d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk PluginConverter<T, P> converter); 561d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk ExtensionBuilder<T> withDefault(Supplier<T> def); 571d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk ExtensionBuilder<T> withCallback(Consumer<T> callback); 580b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk ExtensionBuilder<T> withUiMode(int mode, Supplier<T> def); 59bac4b7d1b1f3b2b43136914c6f86702eb24d956fLujiang Xue ExtensionBuilder<T> withFeature(String feature, Supplier<T> def); 601d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk Extension build(); 611d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 621d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 631d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public interface PluginConverter<T, P> { 641d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk T getInterfaceFromPlugin(P plugin); 651d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 661d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 671d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public interface TunerFactory<T> { 681d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk String[] keys(); 691d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk T create(Map<String, String> settings); 701d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 711d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk} 72