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