11935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov/*
21935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * Copyright (C) 2011 The Android Open Source Project
31935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov *
41935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
51935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * you may not use this file except in compliance with the License.
61935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * You may obtain a copy of the License at
71935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov *
81935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
91935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov *
101935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * Unless required by applicable law or agreed to in writing, software
111935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
121935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * See the License for the specific language governing permissions and
141935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov * limitations under the License.
151935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov */
161935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
171935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganovpackage android.support.v4.widget;
181935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
1944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackbornimport android.app.SearchManager;
2044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackbornimport android.content.ComponentName;
211935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganovimport android.content.Context;
221935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganovimport android.os.Build;
231935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganovimport android.view.View;
2444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackbornimport android.widget.TextView;
251935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
261935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov/**
270574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link android.widget.SearchView}
280574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
291935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov */
301935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganovpublic class SearchViewCompat {
311935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
321935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    interface SearchViewCompatImpl {
331935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        View newSearchView(Context context);
3444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setSearchableInfo(View searchView, ComponentName searchableComponent);
3544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setImeOptions(View searchView, int imeOptions);
3644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setInputType(View searchView, int inputType);
371935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        Object newOnQueryTextListener(OnQueryTextListenerCompat listener);
381935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        void setOnQueryTextListener(Object searchView, Object listener);
3944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        Object newOnCloseListener(OnCloseListenerCompat listener);
4044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setOnCloseListener(Object searchView, Object listener);
4144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        CharSequence getQuery(View searchView);
4244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setQuery(View searchView, CharSequence query, boolean submit);
4344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setQueryHint(View searchView, CharSequence hint);
4444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setIconified(View searchView, boolean iconify);
4544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        boolean isIconified(View searchView);
4644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setSubmitButtonEnabled(View searchView, boolean enabled);
4744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        boolean isSubmitButtonEnabled(View searchView);
4844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setQueryRefinementEnabled(View searchView, boolean enable);
4944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        boolean isQueryRefinementEnabled(View searchView);
5044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        void setMaxWidth(View searchView, int maxpixels);
511935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
521935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
531935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    static class SearchViewCompatStubImpl implements SearchViewCompatImpl {
541935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
551935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        @Override
561935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public View newSearchView(Context context) {
571935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            return null;
581935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
591935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
601935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        @Override
6144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setSearchableInfo(View searchView, ComponentName searchableComponent) {
6244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
6344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
6444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
6544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setImeOptions(View searchView, int imeOptions) {
6644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
6744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
6844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
6944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setInputType(View searchView, int inputType) {
7044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
7144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
7244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
731935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public Object newOnQueryTextListener(OnQueryTextListenerCompat listener) {
741935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            return null;
751935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
761935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
771935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        @Override
781935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public void setOnQueryTextListener(Object searchView, Object listener) {
7944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
8044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
8144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
8244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public Object newOnCloseListener(OnCloseListenerCompat listener) {
8344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return null;
8444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
8544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
8644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
8744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setOnCloseListener(Object searchView, Object listener) {
8844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
8944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
9044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
9144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public CharSequence getQuery(View searchView) {
9244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return null;
9344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
941935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
9544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
9644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setQuery(View searchView, CharSequence query, boolean submit) {
9744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
9844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
9944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
10044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setQueryHint(View searchView, CharSequence hint) {
10144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
10244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
10344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
10444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setIconified(View searchView, boolean iconify) {
10544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
10644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
10744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
10844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public boolean isIconified(View searchView) {
10944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return true;
11044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
11144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
11244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
11344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setSubmitButtonEnabled(View searchView, boolean enabled) {
11444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
11544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
11644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
11744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public boolean isSubmitButtonEnabled(View searchView) {
11844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return false;
11944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
12044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
12144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
12244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setQueryRefinementEnabled(View searchView, boolean enable) {
12344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
12444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
12544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
12644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public boolean isQueryRefinementEnabled(View searchView) {
12744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return false;
12844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
12944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
13044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
13144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setMaxWidth(View searchView, int maxpixels) {
1321935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
1331935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
1341935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
1351935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    static class SearchViewCompatHoneycombImpl extends SearchViewCompatStubImpl {
1361935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
1371935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        @Override
1381935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public View newSearchView(Context context) {
1391935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            return SearchViewCompatHoneycomb.newSearchView(context);
1401935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
1411935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
1421935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        @Override
14344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setSearchableInfo(View searchView, ComponentName searchableComponent) {
14444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setSearchableInfo(searchView, searchableComponent);
14544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
14644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
14744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
1481935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public Object newOnQueryTextListener(final OnQueryTextListenerCompat listener) {
1491935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            return SearchViewCompatHoneycomb.newOnQueryTextListener(
1501935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                    new SearchViewCompatHoneycomb.OnQueryTextListenerCompatBridge() {
1511935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                        @Override
1521935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                        public boolean onQueryTextSubmit(String query) {
1531935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                            return listener.onQueryTextSubmit(query);
1541935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                        }
1551935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                        @Override
1561935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                        public boolean onQueryTextChange(String newText) {
1571935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                            return listener.onQueryTextChange(newText);
1581935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                        }
1591935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov                    });
1601935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
1611935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
1621935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        @Override
1631935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public void setOnQueryTextListener(Object searchView, Object listener) {
1641935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            SearchViewCompatHoneycomb.setOnQueryTextListener(searchView, listener);
1651935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
16644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
16744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
16844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public Object newOnCloseListener(final OnCloseListenerCompat listener) {
16944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return SearchViewCompatHoneycomb.newOnCloseListener(
17044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn                    new SearchViewCompatHoneycomb.OnCloseListenerCompatBridge() {
17144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn                        @Override
17244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn                        public boolean onClose() {
17344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn                            return listener.onClose();
17444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn                        }
17544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn                    });
17644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
17744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
17844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
17944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setOnCloseListener(Object searchView, Object listener) {
18044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setOnCloseListener(searchView, listener);
18144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
18244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
18344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
18444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public CharSequence getQuery(View searchView) {
18544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return SearchViewCompatHoneycomb.getQuery(searchView);
18644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
18744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
18844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
18944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setQuery(View searchView, CharSequence query, boolean submit) {
19044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setQuery(searchView, query, submit);
19144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
19244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
19344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
19444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setQueryHint(View searchView, CharSequence hint) {
19544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setQueryHint(searchView, hint);
19644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
19744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
19844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
19944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setIconified(View searchView, boolean iconify) {
20044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setIconified(searchView, iconify);
20144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
20244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
20344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
20444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public boolean isIconified(View searchView) {
20544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return SearchViewCompatHoneycomb.isIconified(searchView);
20644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
20744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
20844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
20944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setSubmitButtonEnabled(View searchView, boolean enabled) {
21044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setSubmitButtonEnabled(searchView, enabled);
21144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
21244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
21344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
21444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public boolean isSubmitButtonEnabled(View searchView) {
21544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return SearchViewCompatHoneycomb.isSubmitButtonEnabled(searchView);
21644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
21744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
21844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
21944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setQueryRefinementEnabled(View searchView, boolean enable) {
22044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setQueryRefinementEnabled(searchView, enable);
22144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
22244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
22344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
22444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public boolean isQueryRefinementEnabled(View searchView) {
22544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return SearchViewCompatHoneycomb.isQueryRefinementEnabled(searchView);
22644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
22744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
22844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
22944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setMaxWidth(View searchView, int maxpixels) {
23044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatHoneycomb.setMaxWidth(searchView, maxpixels);
23144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
23244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
23344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
23444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    static class SearchViewCompatIcsImpl extends SearchViewCompatHoneycombImpl {
23544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
23644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
23744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public View newSearchView(Context context) {
23844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return SearchViewCompatIcs.newSearchView(context);
23944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
24044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
24144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
24244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setImeOptions(View searchView, int imeOptions) {
24344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatIcs.setImeOptions(searchView, imeOptions);
24444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
24544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
24644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        @Override
24744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public void setInputType(View searchView, int inputType) {
24844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            SearchViewCompatIcs.setInputType(searchView, inputType);
24944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
2501935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
2511935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
2521935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    private static final SearchViewCompatImpl IMPL;
2531935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
2541935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    static {
25544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        if (Build.VERSION.SDK_INT >= 14) { // ICS
25644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            IMPL = new SearchViewCompatIcsImpl();
25744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        } else if (Build.VERSION.SDK_INT >= 11) { // Honeycomb
2581935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            IMPL = new SearchViewCompatHoneycombImpl();
2591935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        } else {
2601935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            IMPL = new SearchViewCompatStubImpl();
2611935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
2621935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
2631935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
2641935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    private SearchViewCompat(Context context) {
2651935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        /* Hide constructor */
2661935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
2671935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
2681935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    /**
269fe32563fd610767a2d3eea8dbd96e6bae87739d5Svetoslav Ganov     * Creates a new SearchView.
2701935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     *
2711935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     * @param context The Context the view is running in.
2721935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     * @return A SearchView instance if the class is present on the current
2731935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     *         platform, null otherwise.
2741935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     */
2751935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    public static View newSearchView(Context context) {
2761935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        return IMPL.newSearchView(context);
2771935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
2781935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
2791935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    /**
28044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Sets the SearchableInfo for this SearchView. Properties in the SearchableInfo are used
28144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * to display labels, hints, suggestions, create intents for launching search results screens
28244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * and controlling other affordances such as a voice button.
28344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
28444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
28571249413434c56006d2cb5d689198a2814c8e6b7Dianne Hackborn     * @param searchableComponent The application component whose
28644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * {@link android.app.SearchableInfo} should be loaded and applied to
28744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * the SearchView.
28844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
28944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setSearchableInfo(View searchView, ComponentName searchableComponent) {
29044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setSearchableInfo(searchView, searchableComponent);
29144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
29244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
29344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
29444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Sets the IME options on the query text field.  This is a no-op if
29544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * called on pre-{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}
29644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * platforms.
29744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
29844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @see TextView#setImeOptions(int)
29944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
30044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param imeOptions the options to set on the query text field
30144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
30244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setImeOptions(View searchView, int imeOptions) {
30344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setImeOptions(searchView, imeOptions);
30444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
30544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
30644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
30744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Sets the input type on the query text field.  This is a no-op if
30844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * called on pre-{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}
30944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * platforms.
31044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
31144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @see TextView#setInputType(int)
31244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
31344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param inputType the input type to set on the query text field
31444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
31544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setInputType(View searchView, int inputType) {
31644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setInputType(searchView, inputType);
31744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
31844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
31944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
3201935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     * Sets a listener for user actions within the SearchView.
3211935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     *
3221935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     * @param searchView The SearchView in which to register the listener.
3231935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     * @param listener the listener object that receives callbacks when the user performs
3241935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     *     actions in the SearchView such as clicking on buttons or typing a query.
3251935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     */
3261935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    public static void setOnQueryTextListener(View searchView, OnQueryTextListenerCompat listener) {
3271935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        IMPL.setOnQueryTextListener(searchView, listener.mListener);
3281935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
3291935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
3301935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    /**
3311935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     * Callbacks for changes to the query text.
3321935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov     */
3331935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    public static abstract class OnQueryTextListenerCompat {
3341935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        final Object mListener;
3351935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
3361935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public OnQueryTextListenerCompat() {
3371935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            mListener = IMPL.newOnQueryTextListener(this);
3381935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
3391935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
3401935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        /**
3411935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * Called when the user submits the query. This could be due to a key press on the
3421935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * keyboard or due to pressing a submit button.
3431935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * The listener can override the standard behavior by returning true
3441935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * to indicate that it has handled the submit request. Otherwise return false to
3451935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * let the SearchView handle the submission by launching any associated intent.
3461935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         *
3471935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * @param query the query text that is to be submitted
3481935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         *
3491935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * @return true if the query has been handled by the listener, false to let the
3501935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * SearchView perform the default action.
3511935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         */
3521935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public boolean onQueryTextSubmit(String query) {
3531935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            return false;
3541935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
3551935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov
3561935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        /**
3571935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * Called when the query text is changed by the user.
3581935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         *
3591935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * @param newText the new content of the query text field.
3601935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         *
3611935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * @return false if the SearchView should perform the default action of showing any
3621935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         * suggestions if available, true if the action was handled by the listener.
3631935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov         */
3641935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        public boolean onQueryTextChange(String newText) {
3651935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov            return false;
3661935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov        }
3671935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov    }
36844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
36944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
37044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Sets a listener to inform when the user closes the SearchView.
37144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
37244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView in which to register the listener.
37344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param listener the listener to call when the user closes the SearchView.
37444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
37544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setOnCloseListener(View searchView, OnCloseListenerCompat listener) {
37644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setOnCloseListener(searchView, listener.mListener);
37744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
37844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
37944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
38044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Callback for closing the query UI.
38144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
38244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static abstract class OnCloseListenerCompat {
38344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        final Object mListener;
38444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
38544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public OnCloseListenerCompat() {
38644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            mListener = IMPL.newOnCloseListener(this);
38744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
38844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
38944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        /**
39044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn         * The user is attempting to close the SearchView.
39144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn         *
39244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn         * @return true if the listener wants to override the default behavior of clearing the
39344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn         * text field and dismissing it, false otherwise.
39444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn         */
39544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        public boolean onClose() {
39644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn            return false;
39744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        }
39844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
39944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
40044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
40144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Returns the query string currently in the text field.
40244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
40344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
40444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
40544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @return the query string
40644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
40744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static CharSequence getQuery(View searchView) {
40844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        return IMPL.getQuery(searchView);
40944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
41044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
41144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
41244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Sets a query string in the text field and optionally submits the query as well.
41344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
41444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
41544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param query the query string. This replaces any query text already present in the
41644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * text field.
41744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param submit whether to submit the query right now or only update the contents of
41844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * text field.
41944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
42044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setQuery(View searchView, CharSequence query, boolean submit) {
42144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setQuery(searchView, query, submit);
42244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
42344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
42444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
42544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Sets the hint text to display in the query text field. This overrides any hint specified
42644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * in the SearchableInfo.
42744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
42844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
42944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param hint the hint text to display
43044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
43144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setQueryHint(View searchView, CharSequence hint) {
43244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setQueryHint(searchView, hint);
43344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
43444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
43544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
43644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Iconifies or expands the SearchView. Any query text is cleared when iconified. This is
43744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * a temporary state and does not override the default iconified state set by
43871249413434c56006d2cb5d689198a2814c8e6b7Dianne Hackborn     * setIconifiedByDefault(boolean). If the default state is iconified, then
43944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * a false here will only be valid until the user closes the field. And if the default
44044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * state is expanded, then a true here will only clear the text field and not close it.
44144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
44244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
44344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param iconify a true value will collapse the SearchView to an icon, while a false will
44444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * expand it.
44544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
44644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setIconified(View searchView, boolean iconify) {
44744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setIconified(searchView, iconify);
44844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
44944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
45044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
45144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Returns the current iconified state of the SearchView.
45244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
45344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
45444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @return true if the SearchView is currently iconified, false if the search field is
45544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * fully visible.
45644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
45744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static boolean isIconified(View searchView) {
45844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        return IMPL.isIconified(searchView);
45944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
46044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
46144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
46244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Enables showing a submit button when the query is non-empty. In cases where the SearchView
46344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * is being used to filter the contents of the current activity and doesn't launch a separate
46444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * results activity, then the submit button should be disabled.
46544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
46644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
46744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param enabled true to show a submit button for submitting queries, false if a submit
46844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * button is not required.
46944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
47044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setSubmitButtonEnabled(View searchView, boolean enabled) {
47144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setSubmitButtonEnabled(searchView, enabled);
47244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
47344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
47444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
47544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Returns whether the submit button is enabled when necessary or never displayed.
47644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
47744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
47844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @return whether the submit button is enabled automatically when necessary
47944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
48044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static boolean isSubmitButtonEnabled(View searchView) {
48144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        return IMPL.isSubmitButtonEnabled(searchView);
48244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
48344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
48444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
48544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Specifies if a query refinement button should be displayed alongside each suggestion
48644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * or if it should depend on the flags set in the individual items retrieved from the
48744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * suggestions provider. Clicking on the query refinement button will replace the text
48844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * in the query text field with the text from the suggestion. This flag only takes effect
48971249413434c56006d2cb5d689198a2814c8e6b7Dianne Hackborn     * if a SearchableInfo has been specified with {@link #setSearchableInfo(View, ComponentName)}
49044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * and not when using a custom adapter.
49144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
49244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
49344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param enable true if all items should have a query refinement button, false if only
49444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * those items that have a query refinement flag set should have the button.
49544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     *
49644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @see SearchManager#SUGGEST_COLUMN_FLAGS
49744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @see SearchManager#FLAG_QUERY_REFINEMENT
49844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
49944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setQueryRefinementEnabled(View searchView, boolean enable) {
50044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setQueryRefinementEnabled(searchView, enable);
50144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
50244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
50344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
50444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Returns whether query refinement is enabled for all items or only specific ones.
50544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
50644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @return true if enabled for all items, false otherwise.
50744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
50844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static boolean isQueryRefinementEnabled(View searchView) {
50944e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        return IMPL.isQueryRefinementEnabled(searchView);
51044e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
51144e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn
51244e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    /**
51344e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * Makes the view at most this many pixels wide
51444e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     * @param searchView The SearchView to operate on.
51544e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn     */
51644e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    public static void setMaxWidth(View searchView, int maxpixels) {
51744e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn        IMPL.setMaxWidth(searchView, maxpixels);
51844e3a52be44809a8018fb170e3130cc0ae164366Dianne Hackborn    }
5191935ed3af7c6545bc38adfdc6026d87a3249222fSvetoslav Ganov}
520