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.util.SparseBooleanArray; 203561e3e665698843b1c664385a842e779198960bGeorge Mountimport android.widget.TableLayout; 213561e3e665698843b1c664385a842e779198960bGeorge Mount 223561e3e665698843b1c664385a842e779198960bGeorge Mountimport java.util.regex.Pattern; 233561e3e665698843b1c664385a842e779198960bGeorge Mount 243561e3e665698843b1c664385a842e779198960bGeorge Mountpublic class TableLayoutBindingAdapter { 253561e3e665698843b1c664385a842e779198960bGeorge Mount 263561e3e665698843b1c664385a842e779198960bGeorge Mount private static Pattern sColumnPattern = Pattern.compile("\\s*,\\s*"); 273561e3e665698843b1c664385a842e779198960bGeorge Mount 2871eb6908f2689bd17000237eb645896c36da0138George Mount private static final int MAX_COLUMNS = 20; 2971eb6908f2689bd17000237eb645896c36da0138George Mount 3010960eb5f73fd587c2f8d18cfc61873c04017512George Mount @BindingAdapter({"android:collapseColumns"}) 313561e3e665698843b1c664385a842e779198960bGeorge Mount public static void setCollapseColumns(TableLayout view, CharSequence columnsStr) { 323561e3e665698843b1c664385a842e779198960bGeorge Mount SparseBooleanArray columns = parseColumns(columnsStr); 333561e3e665698843b1c664385a842e779198960bGeorge Mount for (int i = 0; i < MAX_COLUMNS; i++) { 343561e3e665698843b1c664385a842e779198960bGeorge Mount boolean isCollapsed = columns.get(i, false); 353561e3e665698843b1c664385a842e779198960bGeorge Mount if (isCollapsed != view.isColumnCollapsed(i)) { 363561e3e665698843b1c664385a842e779198960bGeorge Mount view.setColumnCollapsed(i, isCollapsed); 373561e3e665698843b1c664385a842e779198960bGeorge Mount } 383561e3e665698843b1c664385a842e779198960bGeorge Mount } 393561e3e665698843b1c664385a842e779198960bGeorge Mount } 403561e3e665698843b1c664385a842e779198960bGeorge Mount 4110960eb5f73fd587c2f8d18cfc61873c04017512George Mount @BindingAdapter({"android:shrinkColumns"}) 423561e3e665698843b1c664385a842e779198960bGeorge Mount public static void setShrinkColumns(TableLayout view, CharSequence columnsStr) { 4371eb6908f2689bd17000237eb645896c36da0138George Mount if (columnsStr != null && columnsStr.length() > 0 && columnsStr.charAt(0) == '*') { 443561e3e665698843b1c664385a842e779198960bGeorge Mount view.setShrinkAllColumns(true); 453561e3e665698843b1c664385a842e779198960bGeorge Mount } else { 463561e3e665698843b1c664385a842e779198960bGeorge Mount view.setShrinkAllColumns(false); 473561e3e665698843b1c664385a842e779198960bGeorge Mount SparseBooleanArray columns = parseColumns(columnsStr); 4871eb6908f2689bd17000237eb645896c36da0138George Mount int columnCount = columns.size(); 4971eb6908f2689bd17000237eb645896c36da0138George Mount for (int i = 0; i < columnCount; i++) { 5071eb6908f2689bd17000237eb645896c36da0138George Mount int column = columns.keyAt(i); 5171eb6908f2689bd17000237eb645896c36da0138George Mount boolean shrinkable = columns.valueAt(i); 5271eb6908f2689bd17000237eb645896c36da0138George Mount if (shrinkable) { 5371eb6908f2689bd17000237eb645896c36da0138George Mount view.setColumnShrinkable(column, shrinkable); 543561e3e665698843b1c664385a842e779198960bGeorge Mount } 553561e3e665698843b1c664385a842e779198960bGeorge Mount } 563561e3e665698843b1c664385a842e779198960bGeorge Mount } 573561e3e665698843b1c664385a842e779198960bGeorge Mount } 583561e3e665698843b1c664385a842e779198960bGeorge Mount 5910960eb5f73fd587c2f8d18cfc61873c04017512George Mount @BindingAdapter({"android:stretchColumns"}) 603561e3e665698843b1c664385a842e779198960bGeorge Mount public static void setStretchColumns(TableLayout view, CharSequence columnsStr) { 6171eb6908f2689bd17000237eb645896c36da0138George Mount if (columnsStr != null && columnsStr.length() > 0 && columnsStr.charAt(0) == '*') { 623561e3e665698843b1c664385a842e779198960bGeorge Mount view.setStretchAllColumns(true); 633561e3e665698843b1c664385a842e779198960bGeorge Mount } else { 643561e3e665698843b1c664385a842e779198960bGeorge Mount view.setStretchAllColumns(false); 653561e3e665698843b1c664385a842e779198960bGeorge Mount SparseBooleanArray columns = parseColumns(columnsStr); 6671eb6908f2689bd17000237eb645896c36da0138George Mount int columnCount = columns.size(); 6771eb6908f2689bd17000237eb645896c36da0138George Mount for (int i = 0; i < columnCount; i++) { 6871eb6908f2689bd17000237eb645896c36da0138George Mount int column = columns.keyAt(i); 6971eb6908f2689bd17000237eb645896c36da0138George Mount boolean stretchable = columns.valueAt(i); 7071eb6908f2689bd17000237eb645896c36da0138George Mount if (stretchable) { 7171eb6908f2689bd17000237eb645896c36da0138George Mount view.setColumnStretchable(column, stretchable); 723561e3e665698843b1c664385a842e779198960bGeorge Mount } 733561e3e665698843b1c664385a842e779198960bGeorge Mount } 743561e3e665698843b1c664385a842e779198960bGeorge Mount } 753561e3e665698843b1c664385a842e779198960bGeorge Mount } 763561e3e665698843b1c664385a842e779198960bGeorge Mount 773561e3e665698843b1c664385a842e779198960bGeorge Mount private static SparseBooleanArray parseColumns(CharSequence sequence) { 783561e3e665698843b1c664385a842e779198960bGeorge Mount SparseBooleanArray columns = new SparseBooleanArray(); 7971eb6908f2689bd17000237eb645896c36da0138George Mount if (sequence == null) { 8071eb6908f2689bd17000237eb645896c36da0138George Mount return columns; 8171eb6908f2689bd17000237eb645896c36da0138George Mount } 823561e3e665698843b1c664385a842e779198960bGeorge Mount String[] columnDefs = sColumnPattern.split(sequence); 833561e3e665698843b1c664385a842e779198960bGeorge Mount 843561e3e665698843b1c664385a842e779198960bGeorge Mount for (String columnIdentifier : columnDefs) { 853561e3e665698843b1c664385a842e779198960bGeorge Mount try { 863561e3e665698843b1c664385a842e779198960bGeorge Mount int columnIndex = Integer.parseInt(columnIdentifier); 873561e3e665698843b1c664385a842e779198960bGeorge Mount // only valid, i.e. positive, columns indexes are handled 883561e3e665698843b1c664385a842e779198960bGeorge Mount if (columnIndex >= 0) { 893561e3e665698843b1c664385a842e779198960bGeorge Mount // putting true in this sparse array indicates that the 903561e3e665698843b1c664385a842e779198960bGeorge Mount // column index was defined in the XML file 913561e3e665698843b1c664385a842e779198960bGeorge Mount columns.put(columnIndex, true); 923561e3e665698843b1c664385a842e779198960bGeorge Mount } 933561e3e665698843b1c664385a842e779198960bGeorge Mount } catch (NumberFormatException e) { 943561e3e665698843b1c664385a842e779198960bGeorge Mount // we just ignore columns that don't exist 953561e3e665698843b1c664385a842e779198960bGeorge Mount } 963561e3e665698843b1c664385a842e779198960bGeorge Mount } 973561e3e665698843b1c664385a842e779198960bGeorge Mount 983561e3e665698843b1c664385a842e779198960bGeorge Mount return columns; 993561e3e665698843b1c664385a842e779198960bGeorge Mount } 1003561e3e665698843b1c664385a842e779198960bGeorge Mount} 101