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