10112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler/* 20112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Copyright (C) 2015 The Android Open Source Project 30112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 40112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 50112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * you may not use this file except in compliance with the License. 60112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * You may obtain a copy of the License at 70112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 80112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * http://www.apache.org/licenses/LICENSE-2.0 90112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 100112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Unless required by applicable law or agreed to in writing, software 110112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 120112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * See the License for the specific language governing permissions and 140112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * limitations under the License 150112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 160112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 170112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerpackage android.support.v14.preference; 180112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 190112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.content.Context; 200112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.content.res.TypedArray; 210112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.os.Parcel; 220112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.os.Parcelable; 230112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.support.annotation.ArrayRes; 240112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.support.annotation.NonNull; 250112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.support.v4.content.res.TypedArrayUtils; 2631453bcbebe270c126f9980f69d4626228c71f0dTony Mantlerimport android.support.v7.preference.internal.AbstractMultiSelectListPreference; 270112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport android.util.AttributeSet; 280112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 290112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport java.util.Collections; 300112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport java.util.HashSet; 310112bacf4aa212f4d0da45594a88694f295ae56cTony Mantlerimport java.util.Set; 320112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 330112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler/** 340112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * A {@link android.support.v7.preference.Preference} that displays a list of entries as 350112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * a dialog. 360112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * <p> 370112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * This preference will store a set of strings into the SharedPreferences. 380112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * This set will contain one or more values from the 390112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * {@link #setEntryValues(CharSequence[])} array. 400112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 41929f27aab7ac7231f3734c988d5ee7201627d535Alan Viverette * @attr name android:entries 42929f27aab7ac7231f3734c988d5ee7201627d535Alan Viverette * @attr name android:entryValues 430112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 4431453bcbebe270c126f9980f69d4626228c71f0dTony Mantlerpublic class MultiSelectListPreference extends AbstractMultiSelectListPreference { 450112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler private CharSequence[] mEntries; 460112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler private CharSequence[] mEntryValues; 470112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler private Set<String> mValues = new HashSet<>(); 480112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 490112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public MultiSelectListPreference( 500112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 510112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler super(context, attrs, defStyleAttr, defStyleRes); 520112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 530112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final TypedArray a = context.obtainStyledAttributes(attrs, 546759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski android.support.v7.preference.R.styleable.MultiSelectListPreference, defStyleAttr, 550112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler defStyleRes); 560112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 570112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler mEntries = TypedArrayUtils.getTextArray(a, 586759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski android.support.v7.preference.R.styleable.MultiSelectListPreference_entries, 596759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski android.support.v7.preference.R.styleable.MultiSelectListPreference_android_entries); 600112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 610112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler mEntryValues = TypedArrayUtils.getTextArray(a, 626759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski android.support.v7.preference.R.styleable.MultiSelectListPreference_entryValues, 636759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski android.support.v7.preference.R.styleable.MultiSelectListPreference_android_entryValues); 640112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 650112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler a.recycle(); 660112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 670112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 680112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public MultiSelectListPreference(Context context, AttributeSet attrs, int defStyleAttr) { 690112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler this(context, attrs, defStyleAttr, 0); 700112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 710112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 720112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public MultiSelectListPreference(Context context, AttributeSet attrs) { 736759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski this(context, attrs, TypedArrayUtils.getAttr(context, 746759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski android.support.v7.preference.R.attr.dialogPreferenceStyle, 753fadd62b614e4a69aefe920aac640bdb629e502eJason Monk android.R.attr.dialogPreferenceStyle)); 760112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 770112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 780112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public MultiSelectListPreference(Context context) { 790112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler this(context, null); 800112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 810112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 820112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 830112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Sets the human-readable entries to be shown in the list. This will be 840112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * shown in subsequent dialogs. 850112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * <p> 860112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Each entry must have a corresponding index in 870112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * {@link #setEntryValues(CharSequence[])}. 880112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 890112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @param entries The entries. 900112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @see #setEntryValues(CharSequence[]) 910112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 920112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public void setEntries(CharSequence[] entries) { 930112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler mEntries = entries; 940112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 950112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 960112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 970112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @see #setEntries(CharSequence[]) 980112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @param entriesResId The entries array as a resource. 990112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 1000112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public void setEntries(@ArrayRes int entriesResId) { 1010112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler setEntries(getContext().getResources().getTextArray(entriesResId)); 1020112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1030112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1040112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 1050112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * The list of entries to be shown in the list in subsequent dialogs. 1060112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 1070112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @return The list as an array. 1080112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 109e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 1100112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public CharSequence[] getEntries() { 1110112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return mEntries; 1120112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1130112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1140112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 1150112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * The array to find the value to save for a preference when an entry from 1160112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * entries is selected. If a user clicks on the second item in entries, the 1170112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * second item in this array will be saved to the preference. 1180112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 1190112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @param entryValues The array to be used as values to save for the preference. 1200112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 1210112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public void setEntryValues(CharSequence[] entryValues) { 1220112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler mEntryValues = entryValues; 1230112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1240112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1250112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 1260112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @see #setEntryValues(CharSequence[]) 1270112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @param entryValuesResId The entry values array as a resource. 1280112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 1290112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public void setEntryValues(@ArrayRes int entryValuesResId) { 1300112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler setEntryValues(getContext().getResources().getTextArray(entryValuesResId)); 1310112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1320112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1330112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 1340112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Returns the array of values to be saved for the preference. 1350112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 1360112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @return The array of values. 1370112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 138e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 1390112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public CharSequence[] getEntryValues() { 1400112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return mEntryValues; 1410112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1420112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1430112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 1440112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Sets the value of the key. This should contain entries in 1450112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * {@link #getEntryValues()}. 1460112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 1470112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @param values The values to set for the key. 1480112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 149e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 1500112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public void setValues(Set<String> values) { 1510112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler mValues.clear(); 1520112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler mValues.addAll(values); 1530112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1540112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler persistStringSet(values); 1550112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1560112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1570112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 1580112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Retrieves the current value of the key. 1590112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 160e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 1610112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public Set<String> getValues() { 1620112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return mValues; 1630112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1640112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1650112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler /** 1660112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * Returns the index of the given value (in the entry values array). 1670112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * 1680112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @param value The value whose index should be returned. 1690112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler * @return The index of the value, or -1 if not found. 1700112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler */ 1710112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public int findIndexOfValue(String value) { 1720112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler if (value != null && mEntryValues != null) { 1730112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler for (int i = mEntryValues.length - 1; i >= 0; i--) { 1740112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler if (mEntryValues[i].equals(value)) { 1750112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return i; 1760112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1770112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1780112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1790112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return -1; 1800112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1810112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1820112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler protected boolean[] getSelectedItems() { 1830112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final CharSequence[] entries = mEntryValues; 1840112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final int entryCount = entries.length; 1850112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final Set<String> values = mValues; 1860112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler boolean[] result = new boolean[entryCount]; 1870112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1880112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler for (int i = 0; i < entryCount; i++) { 1890112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler result[i] = values.contains(entries[i].toString()); 1900112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1910112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1920112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return result; 1930112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 1940112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 1950112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler @Override 1960112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler protected Object onGetDefaultValue(TypedArray a, int index) { 1970112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final CharSequence[] defaultValues = a.getTextArray(index); 1980112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final Set<String> result = new HashSet<>(); 1990112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2000112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler for (final CharSequence defaultValue : defaultValues) { 2010112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler result.add(defaultValue.toString()); 2020112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2030112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2040112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return result; 2050112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2060112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 207abc73958d264e1eed7fd401a18be1d9ede8304ebAurimas Liutikas @SuppressWarnings("unchecked") 2080112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler @Override 2090112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 2100112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler setValues(restoreValue ? getPersistedStringSet(mValues) : (Set<String>) defaultValue); 2110112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2120112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2130112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler @Override 2140112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler protected Parcelable onSaveInstanceState() { 2150112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final Parcelable superState = super.onSaveInstanceState(); 2160112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler if (isPersistent()) { 2170112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler // No need to save instance state 2180112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return superState; 2190112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2200112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2210112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final SavedState myState = new SavedState(superState); 2220112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler myState.values = getValues(); 2230112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return myState; 2240112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2250112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2260112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler @Override 2270112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler protected void onRestoreInstanceState(Parcelable state) { 2280112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler if (state == null || !state.getClass().equals(SavedState.class)) { 2290112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler // Didn't save state for us in onSaveInstanceState 2300112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler super.onRestoreInstanceState(state); 2310112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return; 2320112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2330112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2340112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler SavedState myState = (SavedState) state; 2350112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler super.onRestoreInstanceState(myState.getSuperState()); 2360112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler setValues(myState.values); 2370112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2380112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2390112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler private static class SavedState extends BaseSavedState { 2400112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler Set<String> values; 2410112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2420112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public SavedState(Parcel source) { 2430112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler super(source); 2440112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler final int size = source.readInt(); 2450112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler values = new HashSet<>(); 2460112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler String[] strings = new String[size]; 2470112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler source.readStringArray(strings); 2480112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2490112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler Collections.addAll(values, strings); 2500112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2510112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2520112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public SavedState(Parcelable superState) { 2530112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler super(superState); 2540112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2550112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2560112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler @Override 2570112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public void writeToParcel(@NonNull Parcel dest, int flags) { 2580112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler super.writeToParcel(dest, flags); 2590112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler dest.writeInt(values.size()); 2600112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler dest.writeStringArray(values.toArray(new String[values.size()])); 2610112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2620112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 2630112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public static final Parcelable.Creator<SavedState> CREATOR = 2640112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler new Parcelable.Creator<SavedState>() { 265e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 2660112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public SavedState createFromParcel(Parcel in) { 2670112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return new SavedState(in); 2680112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2690112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler 270e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 2710112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler public SavedState[] newArray(int size) { 2720112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler return new SavedState[size]; 2730112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2740112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler }; 2750112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler } 2760112bacf4aa212f4d0da45594a88694f295ae56cTony Mantler} 277