13561e3e665698843b1c664385a842e779198960bGeorge Mount/*
23561e3e665698843b1c664385a842e779198960bGeorge Mount * Copyright (C) 2015 The Android Open Source Project
33561e3e665698843b1c664385a842e779198960bGeorge Mount *
43561e3e665698843b1c664385a842e779198960bGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License");
53561e3e665698843b1c664385a842e779198960bGeorge Mount * you may not use this file except in compliance with the License.
63561e3e665698843b1c664385a842e779198960bGeorge Mount * You may obtain a copy of the License at
73561e3e665698843b1c664385a842e779198960bGeorge Mount *
83561e3e665698843b1c664385a842e779198960bGeorge Mount *      http://www.apache.org/licenses/LICENSE-2.0
93561e3e665698843b1c664385a842e779198960bGeorge Mount *
103561e3e665698843b1c664385a842e779198960bGeorge Mount * Unless required by applicable law or agreed to in writing, software
113561e3e665698843b1c664385a842e779198960bGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS,
123561e3e665698843b1c664385a842e779198960bGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133561e3e665698843b1c664385a842e779198960bGeorge Mount * See the License for the specific language governing permissions and
143561e3e665698843b1c664385a842e779198960bGeorge Mount * limitations under the License.
153561e3e665698843b1c664385a842e779198960bGeorge Mount */
16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.adapters;
173561e3e665698843b1c664385a842e779198960bGeorge Mount
18fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.BindingAdapter;
193561e3e665698843b1c664385a842e779198960bGeorge Mountimport android.widget.AbsSpinner;
203561e3e665698843b1c664385a842e779198960bGeorge Mountimport android.widget.ArrayAdapter;
213561e3e665698843b1c664385a842e779198960bGeorge Mountimport android.widget.SpinnerAdapter;
223561e3e665698843b1c664385a842e779198960bGeorge Mount
23c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mountimport java.util.List;
24c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount
253561e3e665698843b1c664385a842e779198960bGeorge Mountpublic class AbsSpinnerBindingAdapter {
263561e3e665698843b1c664385a842e779198960bGeorge Mount
2710960eb5f73fd587c2f8d18cfc61873c04017512George Mount    @BindingAdapter({"android:entries"})
28c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount    public static <T extends CharSequence> void setEntries(AbsSpinner view, T[] entries) {
293561e3e665698843b1c664385a842e779198960bGeorge Mount        if (entries != null) {
303561e3e665698843b1c664385a842e779198960bGeorge Mount            SpinnerAdapter oldAdapter = view.getAdapter();
313561e3e665698843b1c664385a842e779198960bGeorge Mount            boolean changed = true;
321b9940e612fc73202837fbe9db2f9035f307b5d1George Mount            if (oldAdapter != null && oldAdapter.getCount() == entries.length) {
333561e3e665698843b1c664385a842e779198960bGeorge Mount                changed = false;
343561e3e665698843b1c664385a842e779198960bGeorge Mount                for (int i = 0; i < entries.length; i++) {
3571eb6908f2689bd17000237eb645896c36da0138George Mount                    if (!entries[i].equals(oldAdapter.getItem(i))) {
363561e3e665698843b1c664385a842e779198960bGeorge Mount                        changed = true;
373561e3e665698843b1c664385a842e779198960bGeorge Mount                        break;
383561e3e665698843b1c664385a842e779198960bGeorge Mount                    }
393561e3e665698843b1c664385a842e779198960bGeorge Mount                }
403561e3e665698843b1c664385a842e779198960bGeorge Mount            }
413561e3e665698843b1c664385a842e779198960bGeorge Mount            if (changed) {
423561e3e665698843b1c664385a842e779198960bGeorge Mount                ArrayAdapter<CharSequence> adapter =
433561e3e665698843b1c664385a842e779198960bGeorge Mount                        new ArrayAdapter<CharSequence>(view.getContext(),
443561e3e665698843b1c664385a842e779198960bGeorge Mount                                android.R.layout.simple_spinner_item, entries);
453561e3e665698843b1c664385a842e779198960bGeorge Mount                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
463561e3e665698843b1c664385a842e779198960bGeorge Mount                view.setAdapter(adapter);
473561e3e665698843b1c664385a842e779198960bGeorge Mount            }
483561e3e665698843b1c664385a842e779198960bGeorge Mount        } else {
493561e3e665698843b1c664385a842e779198960bGeorge Mount            view.setAdapter(null);
503561e3e665698843b1c664385a842e779198960bGeorge Mount        }
513561e3e665698843b1c664385a842e779198960bGeorge Mount    }
52c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount
53c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount    @BindingAdapter({"android:entries"})
54c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount    public static <T> void setEntries(AbsSpinner view, List<T> entries) {
55c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount        if (entries != null) {
56c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount            SpinnerAdapter oldAdapter = view.getAdapter();
57c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount            if (oldAdapter instanceof ObservableListAdapter) {
58c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount                ((ObservableListAdapter) oldAdapter).setList(entries);
59c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount            } else {
60c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount                view.setAdapter(new ObservableListAdapter<T>(view.getContext(), entries,
61c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount                        android.R.layout.simple_spinner_item,
62c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount                        android.R.layout.simple_spinner_dropdown_item, 0));
63c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount            }
64c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount        } else {
65c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount            view.setAdapter(null);
66c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount        }
67c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount    }
683561e3e665698843b1c664385a842e779198960bGeorge Mount}
69