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.utils.leaks; 161d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 170b80c4e518110ba385a1b83d1e29325f164dc90dJason Monkimport android.content.Context; 18340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.LeakCheck; 19340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.LeakCheck.Tracker; 201d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 211d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport com.android.systemui.statusbar.policy.ExtensionController; 221d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 231d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Consumer; 241d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Supplier; 251d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 261d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkpublic class FakeExtensionController implements ExtensionController { 271d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 281d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk private final Tracker mTracker; 291d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 30340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk public FakeExtensionController(LeakCheck test) { 311d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk mTracker = test.getTracker("extension"); 321d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 331d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 341d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 351d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public <T> ExtensionBuilder<T> newExtension(Class<T> cls) { 361d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk final Object o = new Object(); 371d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk mTracker.getLeakInfo(o).addAllocation(new Throwable()); 381d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return new FakeExtensionBuilder(o); 391d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 401d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 411d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk private class FakeExtensionBuilder<T> implements ExtensionBuilder<T> { 421d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk private final Object mAllocation; 431d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 441d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public FakeExtensionBuilder(Object o) { 451d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk mAllocation = o; 461d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 471d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 481d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 491d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public ExtensionBuilder<T> withTunerFactory(TunerFactory<T> factory) { 501d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return this; 511d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 521d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 531d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 541d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls) { 551d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return this; 561d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 571d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 581d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 591d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls, String action) { 601d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return this; 611d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 621d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 631d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 641d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public <P> ExtensionBuilder<T> withPlugin(Class<P> cls, String action, PluginConverter<T, P> converter) { 651d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return this; 661d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 671d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 681d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 691d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public ExtensionBuilder<T> withDefault(Supplier<T> def) { 701d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return this; 711d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 721d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 731d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 741d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public ExtensionBuilder<T> withCallback(Consumer<T> callback) { 751d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return this; 761d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 771d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 781d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 790b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk public ExtensionBuilder<T> withUiMode(int mode, Supplier<T> def) { 800b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk return null; 810b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk } 820b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk 830b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk @Override 84bac4b7d1b1f3b2b43136914c6f86702eb24d956fLujiang Xue public ExtensionBuilder<T> withFeature(String feature, Supplier<T> def) { 85bac4b7d1b1f3b2b43136914c6f86702eb24d956fLujiang Xue return null; 86bac4b7d1b1f3b2b43136914c6f86702eb24d956fLujiang Xue } 87bac4b7d1b1f3b2b43136914c6f86702eb24d956fLujiang Xue 88bac4b7d1b1f3b2b43136914c6f86702eb24d956fLujiang Xue @Override 891d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public Extension build() { 901d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return new FakeExtension(mAllocation); 911d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 921d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 931d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 941d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk private class FakeExtension<T> implements Extension<T> { 951d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk private final Object mAllocation; 961d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 971d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public FakeExtension(Object allocation) { 981d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk mAllocation = allocation; 991d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 1001d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 1011d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 1021d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public T get() { 1031d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk // TODO: Support defaults or things. 1041d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk return null; 1051d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 1061d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk 1071d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk @Override 1083b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk public void clearItem(boolean isDestroyed) { 1093b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk 1103b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk } 1113b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk 1123b9357f3b9d6f2dae175ad1b92116e17b6df1493Jason Monk @Override 1130b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk public Context getContext() { 1140b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk return null; 1150b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk } 1160b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk 1170b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk @Override 1181d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk public void destroy() { 1191d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk mTracker.getLeakInfo(mAllocation).clearAllocations(); 1201d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 1210b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk 1220b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk @Override 1230b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk public void addCallback(Consumer<T> callback) { 124769139da0397c5b2abf0f6d5fbcf3e2bd33276dbJason Monk } 1250b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk 126a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk public T reload() { 127a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk return null; 1280b80c4e518110ba385a1b83d1e29325f164dc90dJason Monk } 1291d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk } 1301d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk} 131