120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn/*
220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project
320c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn *
420c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
520c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at
620c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn *
720c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0
820c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn *
920c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License
1020c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under
1220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * the License.
1320c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn */
1420c094c196271089a7119a965b6a99786ea9ed36Tim Kilbournpackage android.support.v17.leanback.widget;
1520c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn
1613d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbournimport java.util.HashMap;
1713d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn
1820c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn/**
1913d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn * A ClassPresenterSelector selects a {@link Presenter} based on the item's
2013d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn * Java class.
2120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn */
220f1fa0dfa946ddc8afb6af26a4dd1a4d01dca10fDake Gupublic final class ClassPresenterSelector extends PresenterSelector {
2313d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn
2413d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn    private final HashMap<Class<?>, Presenter> mClassMap = new HashMap<Class<?>, Presenter>();
2513d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn
2613d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn    public void addClassPresenter(Class<?> cls, Presenter presenter) {
2713d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn        mClassMap.put(cls, presenter);
2813d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn    }
2913d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn
3013d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn    @Override
3120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    public Presenter getPresenter(Object item) {
3213d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn        Class<?> cls = item.getClass();
3313d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn        Presenter presenter = null;
3413d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn
3513d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn        do {
3613d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn            presenter = mClassMap.get(cls);
3713d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn            cls = cls.getSuperclass();
3813d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn        } while (presenter == null && cls != null);
3913d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn
4013d1515a1edd63f26ad7f3c9c7471d0969900190Tim Kilbourn        return presenter;
4120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    }
4220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn}
43