1716ba89e7f459f49ea85070d4710c1d79d715298George Mount/*
2716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Copyright (C) 2015 The Android Open Source Project
3716ba89e7f459f49ea85070d4710c1d79d715298George Mount *
4716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5716ba89e7f459f49ea85070d4710c1d79d715298George Mount * you may not use this file except in compliance with the License.
6716ba89e7f459f49ea85070d4710c1d79d715298George Mount * You may obtain a copy of the License at
7716ba89e7f459f49ea85070d4710c1d79d715298George Mount *
8716ba89e7f459f49ea85070d4710c1d79d715298George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9716ba89e7f459f49ea85070d4710c1d79d715298George Mount *
10716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Unless required by applicable law or agreed to in writing, software
11716ba89e7f459f49ea85070d4710c1d79d715298George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12716ba89e7f459f49ea85070d4710c1d79d715298George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13716ba89e7f459f49ea85070d4710c1d79d715298George Mount * See the License for the specific language governing permissions and
14716ba89e7f459f49ea85070d4710c1d79d715298George Mount * limitations under the License.
15716ba89e7f459f49ea85070d4710c1d79d715298George Mount */
16716ba89e7f459f49ea85070d4710c1d79d715298George Mountpackage android.databinding.adapters;
17716ba89e7f459f49ea85070d4710c1d79d715298George Mount
18716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.annotation.TargetApi;
19716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.databinding.BindingAdapter;
20716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.databinding.BindingMethod;
21716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.databinding.BindingMethods;
22716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.os.Build.VERSION;
23716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.os.Build.VERSION_CODES;
24716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.widget.SearchView;
25716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.widget.SearchView.OnQueryTextListener;
26716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.widget.SearchView.OnSuggestionListener;
27716ba89e7f459f49ea85070d4710c1d79d715298George Mount
28716ba89e7f459f49ea85070d4710c1d79d715298George Mount@BindingMethods({
29716ba89e7f459f49ea85070d4710c1d79d715298George Mount        @BindingMethod(type = SearchView.class, attribute = "android:onQueryTextFocusChange", method = "setOnQueryTextFocusChangeListener"),
30716ba89e7f459f49ea85070d4710c1d79d715298George Mount        @BindingMethod(type = SearchView.class, attribute = "android:onSearchClick", method = "setOnSearchClickListener"),
31716ba89e7f459f49ea85070d4710c1d79d715298George Mount        @BindingMethod(type = SearchView.class, attribute = "android:onClose", method = "setOnCloseListener"),
32716ba89e7f459f49ea85070d4710c1d79d715298George Mount})
33716ba89e7f459f49ea85070d4710c1d79d715298George Mountpublic class SearchViewBindingAdapter {
3496b22e7bbbf942aea1079dc8e8d0c4657663e5a7George Mount    @BindingAdapter(value = {"android:onQueryTextSubmit", "android:onQueryTextChange"},
3596b22e7bbbf942aea1079dc8e8d0c4657663e5a7George Mount            requireAll = false)
3696b22e7bbbf942aea1079dc8e8d0c4657663e5a7George Mount    public static void setOnQueryTextListener(SearchView view, final OnQueryTextSubmit submit,
37716ba89e7f459f49ea85070d4710c1d79d715298George Mount            final OnQueryTextChange change) {
38716ba89e7f459f49ea85070d4710c1d79d715298George Mount        if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) {
39716ba89e7f459f49ea85070d4710c1d79d715298George Mount            if (submit == null && change == null){
40716ba89e7f459f49ea85070d4710c1d79d715298George Mount                view.setOnQueryTextListener(null);
41716ba89e7f459f49ea85070d4710c1d79d715298George Mount            } else {
42716ba89e7f459f49ea85070d4710c1d79d715298George Mount                view.setOnQueryTextListener(new OnQueryTextListener() {
43716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    @Override
44716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    public boolean onQueryTextSubmit(String query) {
45716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        if (submit != null) {
46716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return submit.onQueryTextSubmit(query);
47716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        } else {
48716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return false;
49716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        }
50716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    }
51716ba89e7f459f49ea85070d4710c1d79d715298George Mount
52716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    @Override
53716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    public boolean onQueryTextChange(String newText) {
54716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        if (change != null) {
55716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return change.onQueryTextChange(newText);
56716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        } else {
57716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return false;
58716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        }
59716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    }
60716ba89e7f459f49ea85070d4710c1d79d715298George Mount                });
61716ba89e7f459f49ea85070d4710c1d79d715298George Mount            }
62716ba89e7f459f49ea85070d4710c1d79d715298George Mount        }
63716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
64716ba89e7f459f49ea85070d4710c1d79d715298George Mount
6596b22e7bbbf942aea1079dc8e8d0c4657663e5a7George Mount    @BindingAdapter(value = {"android:onSuggestionSelect", "android:onSuggestionClick"},
6696b22e7bbbf942aea1079dc8e8d0c4657663e5a7George Mount            requireAll = false)
6796b22e7bbbf942aea1079dc8e8d0c4657663e5a7George Mount    public static void setOnSuggestListener(SearchView view, final OnSuggestionSelect submit,
68716ba89e7f459f49ea85070d4710c1d79d715298George Mount            final OnSuggestionClick change) {
69716ba89e7f459f49ea85070d4710c1d79d715298George Mount        if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) {
70716ba89e7f459f49ea85070d4710c1d79d715298George Mount            if (submit == null && change == null) {
71716ba89e7f459f49ea85070d4710c1d79d715298George Mount                view.setOnSuggestionListener(null);
72716ba89e7f459f49ea85070d4710c1d79d715298George Mount            } else {
73716ba89e7f459f49ea85070d4710c1d79d715298George Mount                view.setOnSuggestionListener(new OnSuggestionListener() {
74716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    @Override
75716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    public boolean onSuggestionSelect(int position) {
76716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        if (submit != null) {
77716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return submit.onSuggestionSelect(position);
78716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        } else {
79716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return false;
80716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        }
81716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    }
82716ba89e7f459f49ea85070d4710c1d79d715298George Mount
83716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    @Override
84716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    public boolean onSuggestionClick(int position) {
85716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        if (change != null) {
86716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return change.onSuggestionClick(position);
87716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        } else {
88716ba89e7f459f49ea85070d4710c1d79d715298George Mount                            return false;
89716ba89e7f459f49ea85070d4710c1d79d715298George Mount                        }
90716ba89e7f459f49ea85070d4710c1d79d715298George Mount                    }
91716ba89e7f459f49ea85070d4710c1d79d715298George Mount                });
92716ba89e7f459f49ea85070d4710c1d79d715298George Mount            }
93716ba89e7f459f49ea85070d4710c1d79d715298George Mount        }
94716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
95716ba89e7f459f49ea85070d4710c1d79d715298George Mount
96716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @TargetApi(VERSION_CODES.HONEYCOMB)
97716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public interface OnQueryTextSubmit {
98716ba89e7f459f49ea85070d4710c1d79d715298George Mount        boolean onQueryTextSubmit(String query);
99716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
100716ba89e7f459f49ea85070d4710c1d79d715298George Mount
101716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @TargetApi(VERSION_CODES.HONEYCOMB)
102716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public interface OnQueryTextChange {
103716ba89e7f459f49ea85070d4710c1d79d715298George Mount        boolean onQueryTextChange(String newText);
104716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
105716ba89e7f459f49ea85070d4710c1d79d715298George Mount
106716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @TargetApi(VERSION_CODES.HONEYCOMB)
107716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public interface OnSuggestionSelect {
108716ba89e7f459f49ea85070d4710c1d79d715298George Mount        boolean onSuggestionSelect(int position);
109716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
110716ba89e7f459f49ea85070d4710c1d79d715298George Mount
111716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @TargetApi(VERSION_CODES.HONEYCOMB)
112716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public interface OnSuggestionClick {
113716ba89e7f459f49ea85070d4710c1d79d715298George Mount        boolean onSuggestionClick(int position);
114716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
115716ba89e7f459f49ea85070d4710c1d79d715298George Mount}
116