DefaultSuggestionViewFactory.java revision 77909685887bd6db7454b73cf274afc3aca2f58d
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.quicksearchbox.ui;
17
18import com.android.quicksearchbox.Suggestion;
19import com.android.quicksearchbox.SuggestionCursor;
20
21import android.content.Context;
22import android.view.View;
23import android.view.ViewGroup;
24
25import java.util.Collection;
26import java.util.HashSet;
27import java.util.LinkedList;
28
29/**
30 * Suggestion view factory for Google suggestions.
31 */
32public class DefaultSuggestionViewFactory implements SuggestionViewFactory {
33
34    private final LinkedList<SuggestionViewFactory> mFactories
35            = new LinkedList<SuggestionViewFactory>();
36    private final SuggestionViewFactory mDefaultFactory;
37    private HashSet<String> mViewTypes;
38
39    public DefaultSuggestionViewFactory(Context context) {
40        mDefaultFactory = new DefaultSuggestionView.Factory(context);
41        addFactory(new WebSearchSuggestionView.Factory(context));
42        addFactory(new ContactSuggestionView.Factory(context));
43    }
44
45    /**
46     * Must only be called from the constructor
47     */
48    protected final void addFactory(SuggestionViewFactory factory) {
49        mFactories.addFirst(factory);
50    }
51
52    public Collection<String> getSuggestionViewTypes() {
53        if (mViewTypes == null) {
54            mViewTypes = new HashSet<String>();
55            mViewTypes.addAll(mDefaultFactory.getSuggestionViewTypes());
56            for (SuggestionViewFactory factory : mFactories) {
57                mViewTypes.addAll(factory.getSuggestionViewTypes());
58            }
59        }
60        return mViewTypes;
61    }
62
63    public View getView(SuggestionCursor suggestion, String userQuery,
64            View convertView, ViewGroup parent) {
65        for (SuggestionViewFactory factory : mFactories) {
66            if (factory.canCreateView(suggestion)) {
67                return factory.getView(suggestion, userQuery, convertView, parent);
68            }
69        }
70        return mDefaultFactory.getView(suggestion, userQuery, convertView, parent);
71    }
72
73    public String getViewType(Suggestion suggestion) {
74        for (SuggestionViewFactory factory : mFactories) {
75            if (factory.canCreateView(suggestion)) {
76                return factory.getViewType(suggestion);
77            }
78        }
79        return mDefaultFactory.getViewType(suggestion);
80    }
81
82    @Override
83    public boolean canCreateView(Suggestion suggestion) {
84        return true;
85    }
86
87}
88