1185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert/*
25229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood * Copyright (C) 2010 The Android Open Source Project
3185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert *
4185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
5185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * you may not use this file except in compliance with the License.
6185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * You may obtain a copy of the License at
7185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert *
8185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert *      http://www.apache.org/licenses/LICENSE-2.0
9185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert *
10185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * Unless required by applicable law or agreed to in writing, software
11185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
12185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * See the License for the specific language governing permissions and
14185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert * limitations under the License.
15185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert */
16185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert
17185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertpackage com.android.quicksearchbox.ui;
18185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert
1993bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringertimport com.android.quicksearchbox.Suggestion;
205229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwoodimport com.android.quicksearchbox.SuggestionCursor;
21c5a3ecb62318a6be1d1a626a36b52829e989f740Bjorn Bringert
22185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.content.Context;
23185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.view.LayoutInflater;
241e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinneyimport android.view.View;
25185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertimport android.view.ViewGroup;
26185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert
275229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwoodimport java.util.Collection;
285229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwoodimport java.util.Collections;
295229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood
30185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert/**
315229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood * Suggestion view factory that inflates views from XML.
32185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert */
33185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringertpublic class SuggestionViewInflater implements SuggestionViewFactory {
34185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert
355229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    private final String mViewType;
365229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    private final Class<?> mViewClass;
375229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    private final int mLayoutId;
381e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney    private final Context mContext;
39713194910648268c094fa81b81f40ce2f7e39333Bjorn Bringert
405229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    /**
415229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood     * @param viewType The unique type of views inflated by this factory
425229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood     * @param viewClass The expected type of view classes.
435229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood     * @param layoutId resource ID of layout to use.
445229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood     * @param context Context to use for inflating the views.
455229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood     */
465229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    public SuggestionViewInflater(String viewType, Class<? extends SuggestionView> viewClass,
475229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            int layoutId, Context context) {
485229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        mViewType = viewType;
495229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        mViewClass = viewClass;
505229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        mLayoutId = layoutId;
51185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert        mContext = context;
52185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert    }
53185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert
5493f03d8f650c584b2a8a50a0b9be37764ae24822Bryan Mawhinney    protected LayoutInflater getInflater() {
55185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert        return (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
56185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert    }
57185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert
585229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    public Collection<String> getSuggestionViewTypes() {
595229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        return Collections.singletonList(mViewType);
601e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney    }
611e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney
625229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    public View getView(SuggestionCursor suggestion, String userQuery,
635229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            View convertView, ViewGroup parent) {
645229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        if (convertView == null || !convertView.getClass().equals(mViewClass)) {
655229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            int layoutId = mLayoutId;
665229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            convertView = getInflater().inflate(layoutId, parent, false);
67713194910648268c094fa81b81f40ce2f7e39333Bjorn Bringert        }
685229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        if (!(convertView instanceof SuggestionView)) {
695229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            throw new IllegalArgumentException("Not a SuggestionView: " + convertView);
705229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        }
715229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        ((SuggestionView) convertView).bindAsSuggestion(suggestion, userQuery);
725229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        return convertView;
73185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert    }
74185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert
755229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    public String getViewType(Suggestion suggestion) {
765229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        return mViewType;
771e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney    }
785229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood
7977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert    public boolean canCreateView(Suggestion suggestion) {
8077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert        return true;
8177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert    }
8277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert
83185bb2e3881452c084fde44d9bee657f65881b0eBjorn Bringert}
84