17746f910656ce6e811853f4062108e9798063337Dianne Hackborn/* 27746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Copyright (C) 2012 The Android Open Source Project 37746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 47746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 57746f910656ce6e811853f4062108e9798063337Dianne Hackborn * you may not use this file except in compliance with the License. 67746f910656ce6e811853f4062108e9798063337Dianne Hackborn * You may obtain a copy of the License at 77746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 87746f910656ce6e811853f4062108e9798063337Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 97746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 107746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 117746f910656ce6e811853f4062108e9798063337Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 127746f910656ce6e811853f4062108e9798063337Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137746f910656ce6e811853f4062108e9798063337Dianne Hackborn * See the License for the specific language governing permissions and 147746f910656ce6e811853f4062108e9798063337Dianne Hackborn * limitations under the License. 157746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 167746f910656ce6e811853f4062108e9798063337Dianne Hackborn 177746f910656ce6e811853f4062108e9798063337Dianne Hackbornpackage android.preference; 187746f910656ce6e811853f4062108e9798063337Dianne Hackborn 197746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport java.util.Arrays; 207746f910656ce6e811853f4062108e9798063337Dianne Hackborn 217746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport android.app.AlertDialog.Builder; 227746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport android.content.Context; 237746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport android.content.DialogInterface; 247746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport android.content.res.TypedArray; 257746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport android.os.Parcel; 267746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport android.os.Parcelable; 277746f910656ce6e811853f4062108e9798063337Dianne Hackbornimport android.util.AttributeSet; 287746f910656ce6e811853f4062108e9798063337Dianne Hackborn 297746f910656ce6e811853f4062108e9798063337Dianne Hackborn/** 307746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @hide 317746f910656ce6e811853f4062108e9798063337Dianne Hackborn * A {@link Preference} that displays a list of entries as 327746f910656ce6e811853f4062108e9798063337Dianne Hackborn * a dialog which allow the user to toggle each individually on and off. 337746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 347746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @attr ref android.R.styleable#ListPreference_entries 357746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @attr ref android.R.styleable#ListPreference_entryValues 367746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 377746f910656ce6e811853f4062108e9798063337Dianne Hackbornpublic class MultiCheckPreference extends DialogPreference { 387746f910656ce6e811853f4062108e9798063337Dianne Hackborn private CharSequence[] mEntries; 397746f910656ce6e811853f4062108e9798063337Dianne Hackborn private String[] mEntryValues; 407746f910656ce6e811853f4062108e9798063337Dianne Hackborn private boolean[] mSetValues; 417746f910656ce6e811853f4062108e9798063337Dianne Hackborn private boolean[] mOrigValues; 427746f910656ce6e811853f4062108e9798063337Dianne Hackborn private String mSummary; 437746f910656ce6e811853f4062108e9798063337Dianne Hackborn 447746f910656ce6e811853f4062108e9798063337Dianne Hackborn public MultiCheckPreference(Context context, AttributeSet attrs) { 457746f910656ce6e811853f4062108e9798063337Dianne Hackborn super(context, attrs); 467746f910656ce6e811853f4062108e9798063337Dianne Hackborn 477746f910656ce6e811853f4062108e9798063337Dianne Hackborn TypedArray a = context.obtainStyledAttributes(attrs, 487746f910656ce6e811853f4062108e9798063337Dianne Hackborn com.android.internal.R.styleable.ListPreference, 0, 0); 497746f910656ce6e811853f4062108e9798063337Dianne Hackborn mEntries = a.getTextArray(com.android.internal.R.styleable.ListPreference_entries); 507746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (mEntries != null) { 517746f910656ce6e811853f4062108e9798063337Dianne Hackborn setEntries(mEntries); 527746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 537746f910656ce6e811853f4062108e9798063337Dianne Hackborn setEntryValuesCS(a.getTextArray( 547746f910656ce6e811853f4062108e9798063337Dianne Hackborn com.android.internal.R.styleable.ListPreference_entryValues)); 557746f910656ce6e811853f4062108e9798063337Dianne Hackborn a.recycle(); 567746f910656ce6e811853f4062108e9798063337Dianne Hackborn 577746f910656ce6e811853f4062108e9798063337Dianne Hackborn /* Retrieve the Preference summary attribute since it's private 587746f910656ce6e811853f4062108e9798063337Dianne Hackborn * in the Preference class. 597746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 607746f910656ce6e811853f4062108e9798063337Dianne Hackborn a = context.obtainStyledAttributes(attrs, 617746f910656ce6e811853f4062108e9798063337Dianne Hackborn com.android.internal.R.styleable.Preference, 0, 0); 627746f910656ce6e811853f4062108e9798063337Dianne Hackborn mSummary = a.getString(com.android.internal.R.styleable.Preference_summary); 637746f910656ce6e811853f4062108e9798063337Dianne Hackborn a.recycle(); 647746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 657746f910656ce6e811853f4062108e9798063337Dianne Hackborn 667746f910656ce6e811853f4062108e9798063337Dianne Hackborn public MultiCheckPreference(Context context) { 677746f910656ce6e811853f4062108e9798063337Dianne Hackborn this(context, null); 687746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 697746f910656ce6e811853f4062108e9798063337Dianne Hackborn 707746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 717746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Sets the human-readable entries to be shown in the list. This will be 727746f910656ce6e811853f4062108e9798063337Dianne Hackborn * shown in subsequent dialogs. 737746f910656ce6e811853f4062108e9798063337Dianne Hackborn * <p> 747746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Each entry must have a corresponding index in 757746f910656ce6e811853f4062108e9798063337Dianne Hackborn * {@link #setEntryValues(CharSequence[])}. 767746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 777746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @param entries The entries. 787746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @see #setEntryValues(CharSequence[]) 797746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 807746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void setEntries(CharSequence[] entries) { 817746f910656ce6e811853f4062108e9798063337Dianne Hackborn mEntries = entries; 827746f910656ce6e811853f4062108e9798063337Dianne Hackborn mSetValues = new boolean[entries.length]; 837746f910656ce6e811853f4062108e9798063337Dianne Hackborn mOrigValues = new boolean[entries.length]; 847746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 857746f910656ce6e811853f4062108e9798063337Dianne Hackborn 867746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 877746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @see #setEntries(CharSequence[]) 887746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @param entriesResId The entries array as a resource. 897746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 907746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void setEntries(int entriesResId) { 917746f910656ce6e811853f4062108e9798063337Dianne Hackborn setEntries(getContext().getResources().getTextArray(entriesResId)); 927746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 937746f910656ce6e811853f4062108e9798063337Dianne Hackborn 947746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 957746f910656ce6e811853f4062108e9798063337Dianne Hackborn * The list of entries to be shown in the list in subsequent dialogs. 967746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 977746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @return The list as an array. 987746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 997746f910656ce6e811853f4062108e9798063337Dianne Hackborn public CharSequence[] getEntries() { 1007746f910656ce6e811853f4062108e9798063337Dianne Hackborn return mEntries; 1017746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1027746f910656ce6e811853f4062108e9798063337Dianne Hackborn 1037746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 1047746f910656ce6e811853f4062108e9798063337Dianne Hackborn * The array to find the value to save for a preference when an entry from 1057746f910656ce6e811853f4062108e9798063337Dianne Hackborn * entries is selected. If a user clicks on the second item in entries, the 1067746f910656ce6e811853f4062108e9798063337Dianne Hackborn * second item in this array will be saved to the preference. 1077746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 1087746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @param entryValues The array to be used as values to save for the preference. 1097746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 1107746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void setEntryValues(String[] entryValues) { 1117746f910656ce6e811853f4062108e9798063337Dianne Hackborn mEntryValues = entryValues; 1127746f910656ce6e811853f4062108e9798063337Dianne Hackborn Arrays.fill(mSetValues, false); 1137746f910656ce6e811853f4062108e9798063337Dianne Hackborn Arrays.fill(mOrigValues, false); 1147746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1157746f910656ce6e811853f4062108e9798063337Dianne Hackborn 1167746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 1177746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @see #setEntryValues(CharSequence[]) 1187746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @param entryValuesResId The entry values array as a resource. 1197746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 1207746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void setEntryValues(int entryValuesResId) { 1217746f910656ce6e811853f4062108e9798063337Dianne Hackborn setEntryValuesCS(getContext().getResources().getTextArray(entryValuesResId)); 1227746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1237746f910656ce6e811853f4062108e9798063337Dianne Hackborn 1247746f910656ce6e811853f4062108e9798063337Dianne Hackborn private void setEntryValuesCS(CharSequence[] values) { 1257746f910656ce6e811853f4062108e9798063337Dianne Hackborn setValues(null); 1267746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (values != null) { 1277746f910656ce6e811853f4062108e9798063337Dianne Hackborn mEntryValues = new String[values.length]; 1287746f910656ce6e811853f4062108e9798063337Dianne Hackborn for (int i=0; i<values.length; i++) { 1297746f910656ce6e811853f4062108e9798063337Dianne Hackborn mEntryValues[i] = values[i].toString(); 1307746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1317746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1327746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1337746f910656ce6e811853f4062108e9798063337Dianne Hackborn 1347746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 1357746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Returns the array of values to be saved for the preference. 1367746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 1377746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @return The array of values. 1387746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 13983e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn public String[] getEntryValues() { 1407746f910656ce6e811853f4062108e9798063337Dianne Hackborn return mEntryValues; 1417746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1427746f910656ce6e811853f4062108e9798063337Dianne Hackborn 1437746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 14483e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn * Get the boolean state of a given value. 14583e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn */ 14683e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn public boolean getValue(int index) { 14783e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn return mSetValues[index]; 14883e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn } 14983e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn 15083e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn /** 15183e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn * Set the boolean state of a given value. 15283e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn */ 15383e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn public void setValue(int index, boolean state) { 15483e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn mSetValues[index] = state; 15583e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn } 15683e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn 15783e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn /** 1587746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Sets the current values. 1597746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 1607746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void setValues(boolean[] values) { 1617746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (mSetValues != null) { 1627746f910656ce6e811853f4062108e9798063337Dianne Hackborn Arrays.fill(mSetValues, false); 1637746f910656ce6e811853f4062108e9798063337Dianne Hackborn Arrays.fill(mOrigValues, false); 1647746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (values != null) { 1657746f910656ce6e811853f4062108e9798063337Dianne Hackborn System.arraycopy(values, 0, mSetValues, 0, 1667746f910656ce6e811853f4062108e9798063337Dianne Hackborn values.length < mSetValues.length ? values.length : mSetValues.length); 1677746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1687746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1697746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1707746f910656ce6e811853f4062108e9798063337Dianne Hackborn 1717746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 1727746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Returns the summary of this ListPreference. If the summary 1737746f910656ce6e811853f4062108e9798063337Dianne Hackborn * has a {@linkplain java.lang.String#format String formatting} 1747746f910656ce6e811853f4062108e9798063337Dianne Hackborn * marker in it (i.e. "%s" or "%1$s"), then the current entry 1757746f910656ce6e811853f4062108e9798063337Dianne Hackborn * value will be substituted in its place. 1767746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 1777746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @return the summary with appropriate string substitution 1787746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 1797746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 1807746f910656ce6e811853f4062108e9798063337Dianne Hackborn public CharSequence getSummary() { 1817746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (mSummary == null) { 1827746f910656ce6e811853f4062108e9798063337Dianne Hackborn return super.getSummary(); 1837746f910656ce6e811853f4062108e9798063337Dianne Hackborn } else { 1847746f910656ce6e811853f4062108e9798063337Dianne Hackborn return mSummary; 1857746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1867746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 1877746f910656ce6e811853f4062108e9798063337Dianne Hackborn 1887746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 1897746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Sets the summary for this Preference with a CharSequence. 1907746f910656ce6e811853f4062108e9798063337Dianne Hackborn * If the summary has a 1917746f910656ce6e811853f4062108e9798063337Dianne Hackborn * {@linkplain java.lang.String#format String formatting} 1927746f910656ce6e811853f4062108e9798063337Dianne Hackborn * marker in it (i.e. "%s" or "%1$s"), then the current entry 1937746f910656ce6e811853f4062108e9798063337Dianne Hackborn * value will be substituted in its place when it's retrieved. 1947746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 1957746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @param summary The summary for the preference. 1967746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 1977746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 1987746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void setSummary(CharSequence summary) { 1997746f910656ce6e811853f4062108e9798063337Dianne Hackborn super.setSummary(summary); 2007746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (summary == null && mSummary != null) { 2017746f910656ce6e811853f4062108e9798063337Dianne Hackborn mSummary = null; 2027746f910656ce6e811853f4062108e9798063337Dianne Hackborn } else if (summary != null && !summary.equals(mSummary)) { 2037746f910656ce6e811853f4062108e9798063337Dianne Hackborn mSummary = summary.toString(); 2047746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2057746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2067746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2077746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 2087746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Returns the currently selected values. 2097746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 2107746f910656ce6e811853f4062108e9798063337Dianne Hackborn public boolean[] getValues() { 2117746f910656ce6e811853f4062108e9798063337Dianne Hackborn return mSetValues; 2127746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2137746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2147746f910656ce6e811853f4062108e9798063337Dianne Hackborn /** 2157746f910656ce6e811853f4062108e9798063337Dianne Hackborn * Returns the index of the given value (in the entry values array). 2167746f910656ce6e811853f4062108e9798063337Dianne Hackborn * 2177746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @param value The value whose index should be returned. 2187746f910656ce6e811853f4062108e9798063337Dianne Hackborn * @return The index of the value, or -1 if not found. 2197746f910656ce6e811853f4062108e9798063337Dianne Hackborn */ 2207746f910656ce6e811853f4062108e9798063337Dianne Hackborn public int findIndexOfValue(String value) { 2217746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (value != null && mEntryValues != null) { 2227746f910656ce6e811853f4062108e9798063337Dianne Hackborn for (int i = mEntryValues.length - 1; i >= 0; i--) { 2237746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (mEntryValues[i].equals(value)) { 2247746f910656ce6e811853f4062108e9798063337Dianne Hackborn return i; 2257746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2267746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2277746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2287746f910656ce6e811853f4062108e9798063337Dianne Hackborn return -1; 2297746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2307746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2317746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 2327746f910656ce6e811853f4062108e9798063337Dianne Hackborn protected void onPrepareDialogBuilder(Builder builder) { 2337746f910656ce6e811853f4062108e9798063337Dianne Hackborn super.onPrepareDialogBuilder(builder); 2347746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2357746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (mEntries == null || mEntryValues == null) { 2367746f910656ce6e811853f4062108e9798063337Dianne Hackborn throw new IllegalStateException( 2377746f910656ce6e811853f4062108e9798063337Dianne Hackborn "ListPreference requires an entries array and an entryValues array."); 2387746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2397746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2407746f910656ce6e811853f4062108e9798063337Dianne Hackborn mOrigValues = Arrays.copyOf(mSetValues, mSetValues.length); 2417746f910656ce6e811853f4062108e9798063337Dianne Hackborn builder.setMultiChoiceItems(mEntries, mSetValues, 2427746f910656ce6e811853f4062108e9798063337Dianne Hackborn new DialogInterface.OnMultiChoiceClickListener() { 2437746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 2447746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void onClick(DialogInterface dialog, int which, boolean isChecked) { 2457746f910656ce6e811853f4062108e9798063337Dianne Hackborn mSetValues[which] = isChecked; 2467746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2477746f910656ce6e811853f4062108e9798063337Dianne Hackborn }); 2487746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2497746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2507746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 2517746f910656ce6e811853f4062108e9798063337Dianne Hackborn protected void onDialogClosed(boolean positiveResult) { 2527746f910656ce6e811853f4062108e9798063337Dianne Hackborn super.onDialogClosed(positiveResult); 2537746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2547746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (positiveResult) { 2557746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (callChangeListener(getValues())) { 2567746f910656ce6e811853f4062108e9798063337Dianne Hackborn return; 2577746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2587746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2597746f910656ce6e811853f4062108e9798063337Dianne Hackborn System.arraycopy(mOrigValues, 0, mSetValues, 0, mSetValues.length); 2607746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2617746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2627746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 2637746f910656ce6e811853f4062108e9798063337Dianne Hackborn protected Object onGetDefaultValue(TypedArray a, int index) { 2647746f910656ce6e811853f4062108e9798063337Dianne Hackborn return a.getString(index); 2657746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2667746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2677746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 2687746f910656ce6e811853f4062108e9798063337Dianne Hackborn protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 2697746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2707746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2717746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 2727746f910656ce6e811853f4062108e9798063337Dianne Hackborn protected Parcelable onSaveInstanceState() { 2737746f910656ce6e811853f4062108e9798063337Dianne Hackborn final Parcelable superState = super.onSaveInstanceState(); 2747746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (isPersistent()) { 2757746f910656ce6e811853f4062108e9798063337Dianne Hackborn // No need to save instance state since it's persistent 2767746f910656ce6e811853f4062108e9798063337Dianne Hackborn return superState; 2777746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2787746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2797746f910656ce6e811853f4062108e9798063337Dianne Hackborn final SavedState myState = new SavedState(superState); 2807746f910656ce6e811853f4062108e9798063337Dianne Hackborn myState.values = getValues(); 2817746f910656ce6e811853f4062108e9798063337Dianne Hackborn return myState; 2827746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2837746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2847746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 2857746f910656ce6e811853f4062108e9798063337Dianne Hackborn protected void onRestoreInstanceState(Parcelable state) { 2867746f910656ce6e811853f4062108e9798063337Dianne Hackborn if (state == null || !state.getClass().equals(SavedState.class)) { 2877746f910656ce6e811853f4062108e9798063337Dianne Hackborn // Didn't save state for us in onSaveInstanceState 2887746f910656ce6e811853f4062108e9798063337Dianne Hackborn super.onRestoreInstanceState(state); 2897746f910656ce6e811853f4062108e9798063337Dianne Hackborn return; 2907746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2917746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2927746f910656ce6e811853f4062108e9798063337Dianne Hackborn SavedState myState = (SavedState) state; 2937746f910656ce6e811853f4062108e9798063337Dianne Hackborn super.onRestoreInstanceState(myState.getSuperState()); 2947746f910656ce6e811853f4062108e9798063337Dianne Hackborn setValues(myState.values); 2957746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 2967746f910656ce6e811853f4062108e9798063337Dianne Hackborn 2977746f910656ce6e811853f4062108e9798063337Dianne Hackborn private static class SavedState extends BaseSavedState { 2987746f910656ce6e811853f4062108e9798063337Dianne Hackborn boolean[] values; 2997746f910656ce6e811853f4062108e9798063337Dianne Hackborn 3007746f910656ce6e811853f4062108e9798063337Dianne Hackborn public SavedState(Parcel source) { 3017746f910656ce6e811853f4062108e9798063337Dianne Hackborn super(source); 3027746f910656ce6e811853f4062108e9798063337Dianne Hackborn values = source.createBooleanArray(); 3037746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 3047746f910656ce6e811853f4062108e9798063337Dianne Hackborn 3057746f910656ce6e811853f4062108e9798063337Dianne Hackborn @Override 3067746f910656ce6e811853f4062108e9798063337Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 3077746f910656ce6e811853f4062108e9798063337Dianne Hackborn super.writeToParcel(dest, flags); 3087746f910656ce6e811853f4062108e9798063337Dianne Hackborn dest.writeBooleanArray(values); 3097746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 3107746f910656ce6e811853f4062108e9798063337Dianne Hackborn 3117746f910656ce6e811853f4062108e9798063337Dianne Hackborn public SavedState(Parcelable superState) { 3127746f910656ce6e811853f4062108e9798063337Dianne Hackborn super(superState); 3137746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 3147746f910656ce6e811853f4062108e9798063337Dianne Hackborn 3157746f910656ce6e811853f4062108e9798063337Dianne Hackborn public static final Parcelable.Creator<SavedState> CREATOR = 3167746f910656ce6e811853f4062108e9798063337Dianne Hackborn new Parcelable.Creator<SavedState>() { 3177746f910656ce6e811853f4062108e9798063337Dianne Hackborn public SavedState createFromParcel(Parcel in) { 3187746f910656ce6e811853f4062108e9798063337Dianne Hackborn return new SavedState(in); 3197746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 3207746f910656ce6e811853f4062108e9798063337Dianne Hackborn 3217746f910656ce6e811853f4062108e9798063337Dianne Hackborn public SavedState[] newArray(int size) { 3227746f910656ce6e811853f4062108e9798063337Dianne Hackborn return new SavedState[size]; 3237746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 3247746f910656ce6e811853f4062108e9798063337Dianne Hackborn }; 3257746f910656ce6e811853f4062108e9798063337Dianne Hackborn } 3267746f910656ce6e811853f4062108e9798063337Dianne Hackborn 3277746f910656ce6e811853f4062108e9798063337Dianne Hackborn} 328