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