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
17340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.LeakCheck;
18340b0e5216b4fcc435e0459b1ca46155a572100dJason Monkimport android.testing.LeakCheck.Tracker;
191d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
201d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport com.android.systemui.statusbar.policy.ExtensionController;
211d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
221d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Consumer;
231d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkimport java.util.function.Supplier;
241d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
251d9632df97bdd4879cff0328a46a8fab6fde441aJason Monkpublic class FakeExtensionController implements ExtensionController {
261d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
271d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    private final Tracker mTracker;
281d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
29340b0e5216b4fcc435e0459b1ca46155a572100dJason Monk    public FakeExtensionController(LeakCheck test) {
301d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        mTracker = test.getTracker("extension");
311d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
321d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
331d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    @Override
341d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    public <T> ExtensionBuilder<T> newExtension(Class<T> cls) {
351d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        final Object o = new Object();
361d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        mTracker.getLeakInfo(o).addAllocation(new Throwable());
371d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        return new FakeExtensionBuilder(o);
381d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
391d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
401d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    private class FakeExtensionBuilder<T> implements ExtensionBuilder<T> {
411d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        private final Object mAllocation;
421d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
431d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public FakeExtensionBuilder(Object o) {
441d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            mAllocation = o;
451d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
461d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
471d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
481d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public ExtensionBuilder<T> withTunerFactory(TunerFactory<T> factory) {
491d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return this;
501d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
511d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
521d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
531d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls) {
541d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return this;
551d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
561d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
571d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
581d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public <P extends T> ExtensionBuilder<T> withPlugin(Class<P> cls, String action) {
591d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return this;
601d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
611d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
621d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
631d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public <P> ExtensionBuilder<T> withPlugin(Class<P> cls, String action, PluginConverter<T, P> converter) {
641d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return this;
651d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
661d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
671d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
681d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public ExtensionBuilder<T> withDefault(Supplier<T> def) {
691d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return this;
701d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
711d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
721d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
731d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public ExtensionBuilder<T> withCallback(Consumer<T> callback) {
741d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return this;
751d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
761d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
771d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
781d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public Extension build() {
791d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return new FakeExtension(mAllocation);
801d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
811d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
821d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
831d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    private class FakeExtension<T> implements Extension<T> {
841d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        private final Object mAllocation;
851d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
861d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public FakeExtension(Object allocation) {
871d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            mAllocation = allocation;
881d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
891d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
901d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
911d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public T get() {
921d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            // TODO: Support defaults or things.
931d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            return null;
941d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
951d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk
961d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        @Override
971d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        public void destroy() {
981d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk            mTracker.getLeakInfo(mAllocation).clearAllocations();
991d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk        }
100a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk
101a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk        @Override
102a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk        public T reload() {
103a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk            return null;
104a29528979cdd6a885869b7651f3b0f93f75843bbJason Monk        }
1051d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk    }
1061d9632df97bdd4879cff0328a46a8fab6fde441aJason Monk}
107