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