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