177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert/* 277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Copyright (C) 2010 The Android Open Source Project 377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * 477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * you may not use this file except in compliance with the License. 677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * You may obtain a copy of the License at 777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * 877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * 1077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Unless required by applicable law or agreed to in writing, software 1177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 1277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * See the License for the specific language governing permissions and 1477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * limitations under the License. 1577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 1677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertpackage com.android.quicksearchbox.ui; 1777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 1877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.content.Context; 1977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.view.View; 2077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.view.ViewGroup; 2177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 22ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwoodimport com.android.quicksearchbox.Suggestion; 23ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwoodimport com.android.quicksearchbox.SuggestionCursor; 24ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood 2577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport java.util.Collection; 2677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport java.util.HashSet; 2777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport java.util.LinkedList; 2877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 2977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert/** 3077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Suggestion view factory for Google suggestions. 3177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 3277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertpublic class DefaultSuggestionViewFactory implements SuggestionViewFactory { 3377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 3477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private final LinkedList<SuggestionViewFactory> mFactories 3577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert = new LinkedList<SuggestionViewFactory>(); 3677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private final SuggestionViewFactory mDefaultFactory; 3777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private HashSet<String> mViewTypes; 3877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 3977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public DefaultSuggestionViewFactory(Context context) { 4077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mDefaultFactory = new DefaultSuggestionView.Factory(context); 4177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert addFactory(new WebSearchSuggestionView.Factory(context)); 4277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 4377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 4477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert /** 4577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Must only be called from the constructor 4677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 4777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected final void addFactory(SuggestionViewFactory factory) { 4877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mFactories.addFirst(factory); 4977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 5077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 51ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood @Override 5277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public Collection<String> getSuggestionViewTypes() { 5377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (mViewTypes == null) { 5477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mViewTypes = new HashSet<String>(); 5577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mViewTypes.addAll(mDefaultFactory.getSuggestionViewTypes()); 5677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert for (SuggestionViewFactory factory : mFactories) { 5777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mViewTypes.addAll(factory.getSuggestionViewTypes()); 5877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 5977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 6077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return mViewTypes; 6177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 6277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 63ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood @Override 6477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public View getView(SuggestionCursor suggestion, String userQuery, 6577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert View convertView, ViewGroup parent) { 6677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert for (SuggestionViewFactory factory : mFactories) { 6777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (factory.canCreateView(suggestion)) { 6877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return factory.getView(suggestion, userQuery, convertView, parent); 6977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 7077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 7177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return mDefaultFactory.getView(suggestion, userQuery, convertView, parent); 7277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 7377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 74ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood @Override 7577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public String getViewType(Suggestion suggestion) { 7677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert for (SuggestionViewFactory factory : mFactories) { 7777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (factory.canCreateView(suggestion)) { 7877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return factory.getViewType(suggestion); 7977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return mDefaultFactory.getViewType(suggestion); 8277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 8477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert @Override 8577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public boolean canCreateView(Suggestion suggestion) { 8677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return true; 8777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 8977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert} 90