diff options
| author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:45 -0800 | 
|---|---|---|
| committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:45 -0800 | 
| commit | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (patch) | |
| tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /core/java/android/preference | |
| parent | 076357b8567458d4b6dfdcf839ef751634cd2bfb (diff) | |
| download | frameworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.zip frameworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.tar.gz frameworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.tar.bz2 | |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'core/java/android/preference')
18 files changed, 0 insertions, 6023 deletions
| diff --git a/core/java/android/preference/CheckBoxPreference.java b/core/java/android/preference/CheckBoxPreference.java deleted file mode 100644 index 1e9b7ae..0000000 --- a/core/java/android/preference/CheckBoxPreference.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.TypedArray; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.AttributeSet; -import android.view.View; -import android.widget.Checkable; -import android.widget.TextView; - -/** - * A {@link Preference} that provides checkbox widget - * functionality. - * <p> - * This preference will store a boolean into the SharedPreferences. - *  - * @attr ref android.R.styleable#CheckBoxPreference_summaryOff - * @attr ref android.R.styleable#CheckBoxPreference_summaryOn - * @attr ref android.R.styleable#CheckBoxPreference_disableDependentsState - */ -public class CheckBoxPreference extends Preference { - -    private CharSequence mSummaryOn; -    private CharSequence mSummaryOff; -     -    private boolean mChecked; -     -    private boolean mDisableDependentsState; -     -    public CheckBoxPreference(Context context, AttributeSet attrs, int defStyle) { -        super(context, attrs, defStyle); -         -        TypedArray a = context.obtainStyledAttributes(attrs, -                com.android.internal.R.styleable.CheckBoxPreference, defStyle, 0); -        mSummaryOn = a.getString(com.android.internal.R.styleable.CheckBoxPreference_summaryOn); -        mSummaryOff = a.getString(com.android.internal.R.styleable.CheckBoxPreference_summaryOff); -        mDisableDependentsState = a.getBoolean( -                com.android.internal.R.styleable.CheckBoxPreference_disableDependentsState, false); -        a.recycle(); -    } - -    public CheckBoxPreference(Context context, AttributeSet attrs) { -        this(context, attrs, com.android.internal.R.attr.checkBoxPreferenceStyle); -    } - -    public CheckBoxPreference(Context context) { -        this(context, null); -    } -     -    @Override -    protected void onBindView(View view) { -        super.onBindView(view); -         -        View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); -        if (checkboxView != null && checkboxView instanceof Checkable) { -            ((Checkable) checkboxView).setChecked(mChecked); -        } - -        // Sync the summary view -        TextView summaryView = (TextView) view.findViewById(com.android.internal.R.id.summary); -        if (summaryView != null) { -            boolean useDefaultSummary = true; -            if (mChecked && mSummaryOn != null) { -                summaryView.setText(mSummaryOn); -                useDefaultSummary = false; -            } else if (!mChecked && mSummaryOff != null) { -                summaryView.setText(mSummaryOff); -                useDefaultSummary = false; -            } -             -            if (useDefaultSummary) { -                final CharSequence summary = getSummary(); -                if (summary != null) { -                    summaryView.setText(summary); -                    useDefaultSummary = false; -                } -            } -             -            int newVisibility = View.GONE; -            if (!useDefaultSummary) { -                // Someone has written to it -                newVisibility = View.VISIBLE; -            } -            if (newVisibility != summaryView.getVisibility()) { -                summaryView.setVisibility(newVisibility); -            } -        } -    } -     -    @Override -    protected void onClick() { -        super.onClick(); -         -        boolean newValue = !isChecked(); -         -        if (!callChangeListener(newValue)) { -            return; -        } -         -        setChecked(newValue); -    } - -    /** -     * Sets the checked state and saves it to the {@link SharedPreferences}. -     *  -     * @param checked The checked state. -     */ -    public void setChecked(boolean checked) { -        mChecked = checked; - -        persistBoolean(checked); -      -        notifyDependencyChange(shouldDisableDependents()); -         -        notifyChanged(); -    } - -    /** -     * Returns the checked state. -     *  -     * @return The checked state. -     */ -    public boolean isChecked() { -        return mChecked; -    } -     -    @Override -    public boolean shouldDisableDependents() { -        boolean shouldDisable = mDisableDependentsState ? mChecked : !mChecked; -        return shouldDisable || super.shouldDisableDependents(); -    } - -    /** -     * Sets the summary to be shown when checked. -     *  -     * @param summary The summary to be shown when checked. -     */ -    public void setSummaryOn(CharSequence summary) { -        mSummaryOn = summary; -        if (isChecked()) { -            notifyChanged(); -        } -    } - -    /** -     * @see #setSummaryOn(CharSequence) -     * @param summaryResId The summary as a resource. -     */ -    public void setSummaryOn(int summaryResId) { -        setSummaryOn(getContext().getString(summaryResId)); -    } -     -    /** -     * Returns the summary to be shown when checked. -     * @return The summary. -     */ -    public CharSequence getSummaryOn() { -        return mSummaryOn; -    } -     -    /** -     * Sets the summary to be shown when unchecked. -     *  -     * @param summary The summary to be shown when unchecked. -     */ -    public void setSummaryOff(CharSequence summary) { -        mSummaryOff = summary; -        if (!isChecked()) { -            notifyChanged(); -        } -    } - -    /** -     * @see #setSummaryOff(CharSequence) -     * @param summaryResId The summary as a resource. -     */ -    public void setSummaryOff(int summaryResId) { -        setSummaryOff(getContext().getString(summaryResId)); -    } -     -    /** -     * Returns the summary to be shown when unchecked. -     * @return The summary. -     */ -    public CharSequence getSummaryOff() { -        return mSummaryOff; -    } - -    /** -     * Returns whether dependents are disabled when this preference is on ({@code true}) -     * or when this preference is off ({@code false}). -     *  -     * @return Whether dependents are disabled when this preference is on ({@code true}) -     *         or when this preference is off ({@code false}). -     */ -    public boolean getDisableDependentsState() { -        return mDisableDependentsState; -    } - -    /** -     * Sets whether dependents are disabled when this preference is on ({@code true}) -     * or when this preference is off ({@code false}). -     *  -     * @param disableDependentsState The preference state that should disable dependents. -     */ -    public void setDisableDependentsState(boolean disableDependentsState) { -        mDisableDependentsState = disableDependentsState; -    } - -    @Override -    protected Object onGetDefaultValue(TypedArray a, int index) { -        return a.getBoolean(index, false); -    } - -    @Override -    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { -        setChecked(restoreValue ? getPersistedBoolean(mChecked) -                : (Boolean) defaultValue); -    } - -    @Override -    protected Parcelable onSaveInstanceState() { -        final Parcelable superState = super.onSaveInstanceState(); -        if (isPersistent()) { -            // No need to save instance state since it's persistent -            return superState; -        } -         -        final SavedState myState = new SavedState(superState); -        myState.checked = isChecked(); -        return myState; -    } - -    @Override -    protected void onRestoreInstanceState(Parcelable state) { -        if (state == null || !state.getClass().equals(SavedState.class)) { -            // Didn't save state for us in onSaveInstanceState -            super.onRestoreInstanceState(state); -            return; -        } -          -        SavedState myState = (SavedState) state; -        super.onRestoreInstanceState(myState.getSuperState()); -        setChecked(myState.checked); -    } -     -    private static class SavedState extends BaseSavedState { -        boolean checked; -         -        public SavedState(Parcel source) { -            super(source); -            checked = source.readInt() == 1; -        } - -        @Override -        public void writeToParcel(Parcel dest, int flags) { -            super.writeToParcel(dest, flags); -            dest.writeInt(checked ? 1 : 0); -        } - -        public SavedState(Parcelable superState) { -            super(superState); -        } - -        public static final Parcelable.Creator<SavedState> CREATOR = -                new Parcelable.Creator<SavedState>() { -            public SavedState createFromParcel(Parcel in) { -                return new SavedState(in); -            } - -            public SavedState[] newArray(int size) { -                return new SavedState[size]; -            } -        }; -    } -     -} diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java deleted file mode 100644 index 666efae..0000000 --- a/core/java/android/preference/DialogPreference.java +++ /dev/null @@ -1,454 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - - -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -/** - * A base class for {@link Preference} objects that are - * dialog-based. These preferences will, when clicked, open a dialog showing the - * actual preference controls. - *  - * @attr ref android.R.styleable#DialogPreference_dialogTitle - * @attr ref android.R.styleable#DialogPreference_dialogMessage - * @attr ref android.R.styleable#DialogPreference_dialogIcon - * @attr ref android.R.styleable#DialogPreference_dialogLayout - * @attr ref android.R.styleable#DialogPreference_positiveButtonText - * @attr ref android.R.styleable#DialogPreference_negativeButtonText - */ -public abstract class DialogPreference extends Preference implements -        DialogInterface.OnClickListener, DialogInterface.OnDismissListener, -        PreferenceManager.OnActivityDestroyListener { -    private AlertDialog.Builder mBuilder; -     -    private CharSequence mDialogTitle; -    private CharSequence mDialogMessage; -    private Drawable mDialogIcon; -    private CharSequence mPositiveButtonText; -    private CharSequence mNegativeButtonText; -    private int mDialogLayoutResId; - -    /** The dialog, if it is showing. */ -    private Dialog mDialog; - -    /** Which button was clicked. */ -    private int mWhichButtonClicked; -     -    public DialogPreference(Context context, AttributeSet attrs, int defStyle) { -        super(context, attrs, defStyle); -         -        TypedArray a = context.obtainStyledAttributes(attrs, -                com.android.internal.R.styleable.DialogPreference, defStyle, 0); -        mDialogTitle = a.getString(com.android.internal.R.styleable.DialogPreference_dialogTitle); -        if (mDialogTitle == null) { -            // Fallback on the regular title of the preference -            // (the one that is seen in the list) -            mDialogTitle = getTitle(); -        } -        mDialogMessage = a.getString(com.android.internal.R.styleable.DialogPreference_dialogMessage); -        mDialogIcon = a.getDrawable(com.android.internal.R.styleable.DialogPreference_dialogIcon); -        mPositiveButtonText = a.getString(com.android.internal.R.styleable.DialogPreference_positiveButtonText); -        mNegativeButtonText = a.getString(com.android.internal.R.styleable.DialogPreference_negativeButtonText); -        mDialogLayoutResId = a.getResourceId(com.android.internal.R.styleable.DialogPreference_dialogLayout, -                mDialogLayoutResId); -        a.recycle(); -         -    } - -    public DialogPreference(Context context, AttributeSet attrs) { -        this(context, attrs, com.android.internal.R.attr.dialogPreferenceStyle); -    } -     -    /** -     * Sets the title of the dialog. This will be shown on subsequent dialogs. -     *  -     * @param dialogTitle The title. -     */ -    public void setDialogTitle(CharSequence dialogTitle) { -        mDialogTitle = dialogTitle; -    } - -    /** -     * @see #setDialogTitle(CharSequence) -     * @param dialogTitleResId The dialog title as a resource. -     */ -    public void setDialogTitle(int dialogTitleResId) { -        setDialogTitle(getContext().getString(dialogTitleResId)); -    } -     -    /** -     * Returns the title to be shown on subsequent dialogs. -     * @return The title. -     */ -    public CharSequence getDialogTitle() { -        return mDialogTitle; -    } -     -    /** -     * Sets the message of the dialog. This will be shown on subsequent dialogs. -     * <p> -     * This message forms the content View of the dialog and conflicts with -     * list-based dialogs, for example. If setting a custom View on a dialog via -     * {@link #setDialogLayoutResource(int)}, include a text View with ID -     * {@link android.R.id#message} and it will be populated with this message. -     *  -     * @param dialogMessage The message. -     */ -    public void setDialogMessage(CharSequence dialogMessage) { -        mDialogMessage = dialogMessage; -    } - -    /** -     * @see #setDialogMessage(CharSequence) -     * @param dialogMessageResId The dialog message as a resource. -     */ -    public void setDialogMessage(int dialogMessageResId) { -        setDialogMessage(getContext().getString(dialogMessageResId)); -    } -     -    /** -     * Returns the message to be shown on subsequent dialogs. -     * @return The message. -     */ -    public CharSequence getDialogMessage() { -        return mDialogMessage; -    } -     -    /** -     * Sets the icon of the dialog. This will be shown on subsequent dialogs. -     *  -     * @param dialogIcon The icon, as a {@link Drawable}. -     */ -    public void setDialogIcon(Drawable dialogIcon) { -        mDialogIcon = dialogIcon; -    } -     -    /** -     * Sets the icon (resource ID) of the dialog. This will be shown on -     * subsequent dialogs. -     *  -     * @param dialogIconRes The icon, as a resource ID. -     */ -    public void setDialogIcon(int dialogIconRes) { -        mDialogIcon = getContext().getResources().getDrawable(dialogIconRes); -    } -     -    /** -     * Returns the icon to be shown on subsequent dialogs. -     * @return The icon, as a {@link Drawable}. -     */ -    public Drawable getDialogIcon() { -        return mDialogIcon; -    } -     -    /** -     * Sets the text of the positive button of the dialog. This will be shown on -     * subsequent dialogs. -     *  -     * @param positiveButtonText The text of the positive button. -     */ -    public void setPositiveButtonText(CharSequence positiveButtonText) { -        mPositiveButtonText = positiveButtonText; -    } - -    /** -     * @see #setPositiveButtonText(CharSequence) -     * @param positiveButtonTextResId The positive button text as a resource. -     */ -    public void setPositiveButtonText(int positiveButtonTextResId) { -        setPositiveButtonText(getContext().getString(positiveButtonTextResId)); -    } -     -    /** -     * Returns the text of the positive button to be shown on subsequent -     * dialogs. -     *  -     * @return The text of the positive button. -     */ -    public CharSequence getPositiveButtonText() { -        return mPositiveButtonText; -    } -     -    /** -     * Sets the text of the negative button of the dialog. This will be shown on -     * subsequent dialogs. -     *  -     * @param negativeButtonText The text of the negative button. -     */ -    public void setNegativeButtonText(CharSequence negativeButtonText) { -        mNegativeButtonText = negativeButtonText; -    } -     -    /** -     * @see #setNegativeButtonText(CharSequence) -     * @param negativeButtonTextResId The negative button text as a resource. -     */ -    public void setNegativeButtonText(int negativeButtonTextResId) { -        setNegativeButtonText(getContext().getString(negativeButtonTextResId)); -    } -     -    /** -     * Returns the text of the negative button to be shown on subsequent -     * dialogs. -     *  -     * @return The text of the negative button. -     */ -    public CharSequence getNegativeButtonText() { -        return mNegativeButtonText; -    } -     -    /** -     * Sets the layout resource that is inflated as the {@link View} to be shown -     * as the content View of subsequent dialogs. -     *  -     * @param dialogLayoutResId The layout resource ID to be inflated. -     * @see #setDialogMessage(CharSequence) -     */ -    public void setDialogLayoutResource(int dialogLayoutResId) { -        mDialogLayoutResId = dialogLayoutResId; -    } -     -    /** -     * Returns the layout resource that is used as the content View for -     * subsequent dialogs. -     *  -     * @return The layout resource. -     */ -    public int getDialogLayoutResource() { -        return mDialogLayoutResId; -    } -     -    /** -     * Prepares the dialog builder to be shown when the preference is clicked. -     * Use this to set custom properties on the dialog. -     * <p> -     * Do not {@link AlertDialog.Builder#create()} or -     * {@link AlertDialog.Builder#show()}. -     */ -    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { -    } -     -    @Override -    protected void onClick() { -        showDialog(null); -    } - -    /** -     * Shows the dialog associated with this Preference. This is normally initiated -     * automatically on clicking on the preference. Call this method if you need to -     * show the dialog on some other event. -     *  -     * @param state Optional instance state to restore on the dialog -     */ -    protected void showDialog(Bundle state) { -        Context context = getContext(); - -        mWhichButtonClicked = DialogInterface.BUTTON2; -         -        mBuilder = new AlertDialog.Builder(context) -            .setTitle(mDialogTitle) -            .setIcon(mDialogIcon) -            .setPositiveButton(mPositiveButtonText, this) -            .setNegativeButton(mNegativeButtonText, this); - -        View contentView = onCreateDialogView(); -        if (contentView != null) { -            onBindDialogView(contentView); -            mBuilder.setView(contentView); -        } else { -            mBuilder.setMessage(mDialogMessage); -        } -         -        onPrepareDialogBuilder(mBuilder); -         -        getPreferenceManager().registerOnActivityDestroyListener(this); -         -        // Create the dialog -        final Dialog dialog = mDialog = mBuilder.create(); -        if (state != null) { -            dialog.onRestoreInstanceState(state); -        } -        dialog.setOnDismissListener(this); -        dialog.show(); -    } -     -    /** -     * Creates the content view for the dialog (if a custom content view is -     * required). By default, it inflates the dialog layout resource if it is -     * set. -     *  -     * @return The content View for the dialog. -     * @see #setLayoutResource(int) -     */ -    protected View onCreateDialogView() { -        if (mDialogLayoutResId == 0) { -            return null; -        } -         -        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService( -                Context.LAYOUT_INFLATER_SERVICE); -        return inflater.inflate(mDialogLayoutResId, null); -    } -     -    /** -     * Binds views in the content View of the dialog to data. -     * <p> -     * Make sure to call through to the superclass implementation. -     *  -     * @param view The content View of the dialog, if it is custom. -     */ -    protected void onBindDialogView(View view) { -        View dialogMessageView = view.findViewById(com.android.internal.R.id.message); -         -        if (dialogMessageView != null) { -            final CharSequence message = getDialogMessage(); -            int newVisibility = View.GONE; -             -            if (!TextUtils.isEmpty(message)) { -                if (dialogMessageView instanceof TextView) { -                    ((TextView) dialogMessageView).setText(message); -                } -                 -                newVisibility = View.VISIBLE; -            } -             -            if (dialogMessageView.getVisibility() != newVisibility) { -                dialogMessageView.setVisibility(newVisibility); -            } -        } -    } -     -    public void onClick(DialogInterface dialog, int which) { -        mWhichButtonClicked = which; -    } -     -    public void onDismiss(DialogInterface dialog) { -         -        getPreferenceManager().unregisterOnActivityDestroyListener(this); -         -        mDialog = null; -        onDialogClosed(mWhichButtonClicked == DialogInterface.BUTTON_POSITIVE); -    } - -    /** -     * Called when the dialog is dismissed and should be used to save data to -     * the {@link SharedPreferences}. -     *  -     * @param positiveResult Whether the positive button was clicked (true), or -     *            the negative button was clicked or the dialog was canceled (false). -     */ -    protected void onDialogClosed(boolean positiveResult) { -    } - -    /** -     * Gets the dialog that is shown by this preference. -     *  -     * @return The dialog, or null if a dialog is not being shown. -     */ -    public Dialog getDialog() { -        return mDialog; -    } - -    /** -     * {@inheritDoc} -     */ -    public void onActivityDestroy() { -         -        if (mDialog == null || !mDialog.isShowing()) { -            return; -        } -         -        mDialog.dismiss(); -    } - -    @Override -    protected Parcelable onSaveInstanceState() { -        final Parcelable superState = super.onSaveInstanceState(); -        if (mDialog == null || !mDialog.isShowing()) { -            return superState; -        } - -        final SavedState myState = new SavedState(superState); -        myState.isDialogShowing = true; -        myState.dialogBundle = mDialog.onSaveInstanceState(); -        return myState; -    } - -    @Override -    protected void onRestoreInstanceState(Parcelable state) { -        if (state == null || !state.getClass().equals(SavedState.class)) { -            // Didn't save state for us in onSaveInstanceState -            super.onRestoreInstanceState(state); -            return; -        } - -        SavedState myState = (SavedState) state; -        super.onRestoreInstanceState(myState.getSuperState()); -        if (myState.isDialogShowing) { -            showDialog(myState.dialogBundle); -        } -    } - -    private static class SavedState extends BaseSavedState { -        boolean isDialogShowing; -        Bundle dialogBundle; -         -        public SavedState(Parcel source) { -            super(source); -            isDialogShowing = source.readInt() == 1; -            dialogBundle = source.readBundle(); -        } - -        @Override -        public void writeToParcel(Parcel dest, int flags) { -            super.writeToParcel(dest, flags); -            dest.writeInt(isDialogShowing ? 1 : 0); -            dest.writeBundle(dialogBundle); -        } - -        public SavedState(Parcelable superState) { -            super(superState); -        } - -        public static final Parcelable.Creator<SavedState> CREATOR = -                new Parcelable.Creator<SavedState>() { -            public SavedState createFromParcel(Parcel in) { -                return new SavedState(in); -            } - -            public SavedState[] newArray(int size) { -                return new SavedState[size]; -            } -        }; -    } -     -} diff --git a/core/java/android/preference/EditTextPreference.java b/core/java/android/preference/EditTextPreference.java deleted file mode 100644 index a12704f..0000000 --- a/core/java/android/preference/EditTextPreference.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.TypedArray; -import android.os.Parcel; -import android.os.Parcelable; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewParent; -import android.widget.EditText; -import android.widget.LinearLayout; - -/** - * A {@link Preference} that allows for string - * input. - * <p> - * It is a subclass of {@link DialogPreference} and shows the {@link EditText} - * in a dialog. This {@link EditText} can be modified either programmatically - * via {@link #getEditText()}, or through XML by setting any EditText - * attributes on the EditTextPreference. - * <p> - * This preference will store a string into the SharedPreferences. - * <p> - * See {@link android.R.styleable#EditText EditText Attributes}. - */ -public class EditTextPreference extends DialogPreference { -    /** -     * The edit text shown in the dialog. -     */ -    private EditText mEditText; -     -    private String mText; -     -    public EditTextPreference(Context context, AttributeSet attrs, int defStyle) { -        super(context, attrs, defStyle); -         -        mEditText = new EditText(context, attrs); -         -        // Give it an ID so it can be saved/restored -        mEditText.setId(com.android.internal.R.id.edit); -         -        /* -         * The preference framework and view framework both have an 'enabled' -         * attribute. Most likely, the 'enabled' specified in this XML is for -         * the preference framework, but it was also given to the view framework. -         * We reset the enabled state. -         */ -        mEditText.setEnabled(true); -    } - -    public EditTextPreference(Context context, AttributeSet attrs) { -        this(context, attrs, com.android.internal.R.attr.editTextPreferenceStyle); -    } - -    public EditTextPreference(Context context) { -        this(context, null); -    } -     -    /** -     * Saves the text to the {@link SharedPreferences}. -     *  -     * @param text The text to save -     */ -    public void setText(String text) { -        final boolean wasBlocking = shouldDisableDependents(); -         -        mText = text; -         -        persistString(text); -         -        final boolean isBlocking = shouldDisableDependents();  -        if (isBlocking != wasBlocking) { -            notifyDependencyChange(isBlocking); -        } -    } -     -    /** -     * Gets the text from the {@link SharedPreferences}. -     *  -     * @return The current preference value. -     */ -    public String getText() { -        return mText; -    } - -    @Override -    protected void onBindDialogView(View view) { -        super.onBindDialogView(view); - -        EditText editText = mEditText; -        editText.setText(getText()); -         -        ViewParent oldParent = editText.getParent(); -        if (oldParent != view) { -            if (oldParent != null) { -                ((ViewGroup) oldParent).removeView(editText); -            } -            onAddEditTextToDialogView(view, editText); -        } -    } - -    /** -     * Adds the EditText widget of this preference to the dialog's view. -     *  -     * @param dialogView The dialog view. -     */ -    protected void onAddEditTextToDialogView(View dialogView, EditText editText) { -        ViewGroup container = (ViewGroup) dialogView -                .findViewById(com.android.internal.R.id.edittext_container); -        if (container != null) { -            container.addView(editText, ViewGroup.LayoutParams.FILL_PARENT, -                    ViewGroup.LayoutParams.WRAP_CONTENT); -        } -    } -     -    @Override -    protected void onDialogClosed(boolean positiveResult) { -        super.onDialogClosed(positiveResult); -         -        if (positiveResult) { -            String value = mEditText.getText().toString(); -            if (callChangeListener(value)) { -                setText(value); -            } -        } -    } - -    @Override -    protected Object onGetDefaultValue(TypedArray a, int index) { -        return a.getString(index); -    } - -    @Override -    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { -        setText(restoreValue ? getPersistedString(mText) : (String) defaultValue); -    } - -    @Override -    public boolean shouldDisableDependents() { -        return TextUtils.isEmpty(mText) || super.shouldDisableDependents(); -    } - -    /** -     * Returns the {@link EditText} widget that will be shown in the dialog. -     *  -     * @return The {@link EditText} widget that will be shown in the dialog. -     */ -    public EditText getEditText() { -        return mEditText; -    } - -    @Override -    protected Parcelable onSaveInstanceState() { -        final Parcelable superState = super.onSaveInstanceState(); -        if (isPersistent()) { -            // No need to save instance state since it's persistent -            return superState; -        } -         -        final SavedState myState = new SavedState(superState); -        myState.text = getText(); -        return myState; -    } - -    @Override -    protected void onRestoreInstanceState(Parcelable state) { -        if (state == null || !state.getClass().equals(SavedState.class)) { -            // Didn't save state for us in onSaveInstanceState -            super.onRestoreInstanceState(state); -            return; -        } -          -        SavedState myState = (SavedState) state; -        super.onRestoreInstanceState(myState.getSuperState()); -        setText(myState.text); -    } -     -    private static class SavedState extends BaseSavedState { -        String text; -         -        public SavedState(Parcel source) { -            super(source); -            text = source.readString(); -        } - -        @Override -        public void writeToParcel(Parcel dest, int flags) { -            super.writeToParcel(dest, flags); -            dest.writeString(text); -        } - -        public SavedState(Parcelable superState) { -            super(superState); -        } - -        public static final Parcelable.Creator<SavedState> CREATOR = -                new Parcelable.Creator<SavedState>() { -            public SavedState createFromParcel(Parcel in) { -                return new SavedState(in); -            } - -            public SavedState[] newArray(int size) { -                return new SavedState[size]; -            } -        }; -    } -     -} diff --git a/core/java/android/preference/GenericInflater.java b/core/java/android/preference/GenericInflater.java deleted file mode 100644 index 3003290..0000000 --- a/core/java/android/preference/GenericInflater.java +++ /dev/null @@ -1,520 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.util.HashMap; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.XmlResourceParser; -import android.util.AttributeSet; -import android.util.Xml; -import android.view.ContextThemeWrapper; -import android.view.InflateException; -import android.view.LayoutInflater; - -// TODO: fix generics -/** - * Generic XML inflater. This has been adapted from {@link LayoutInflater} and - * quickly passed over to use generics. - *  - * @hide - * @param T The type of the items to inflate - * @param P The type of parents (that is those items that contain other items). - *            Must implement {@link GenericInflater.Parent} - */ -abstract class GenericInflater<T, P extends GenericInflater.Parent> { -    private final boolean DEBUG = false; - -    protected final Context mContext; - -    // these are optional, set by the caller -    private boolean mFactorySet; -    private Factory<T> mFactory; - -    private final Object[] mConstructorArgs = new Object[2]; - -    private static final Class[] mConstructorSignature = new Class[] { -            Context.class, AttributeSet.class}; - -    private static final HashMap sConstructorMap = new HashMap(); - -    private String mDefaultPackage; - -    public interface Parent<T> { -        public void addItemFromInflater(T child); -    } -     -    public interface Factory<T> { -        /** -         * Hook you can supply that is called when inflating from a -         * inflater. You can use this to customize the tag -         * names available in your XML files. -         * <p> -         * Note that it is good practice to prefix these custom names with your -         * package (i.e., com.coolcompany.apps) to avoid conflicts with system -         * names. -         *  -         * @param name Tag name to be inflated. -         * @param context The context the item is being created in. -         * @param attrs Inflation attributes as specified in XML file. -         * @return Newly created item. Return null for the default behavior. -         */ -        public T onCreateItem(String name, Context context, AttributeSet attrs); -    } - -    private static class FactoryMerger<T> implements Factory<T> { -        private final Factory<T> mF1, mF2; -         -        FactoryMerger(Factory<T> f1, Factory<T> f2) { -            mF1 = f1; -            mF2 = f2; -        } -         -        public T onCreateItem(String name, Context context, AttributeSet attrs) { -            T v = mF1.onCreateItem(name, context, attrs); -            if (v != null) return v; -            return mF2.onCreateItem(name, context, attrs); -        } -    } -     -    /** -     * Create a new inflater instance associated with a -     * particular Context. -     *  -     * @param context The Context in which this inflater will -     *            create its items; most importantly, this supplies the theme -     *            from which the default values for their attributes are -     *            retrieved. -     */ -    protected GenericInflater(Context context) { -        mContext = context; -    } - -    /** -     * Create a new inflater instance that is a copy of an -     * existing inflater, optionally with its Context -     * changed. For use in implementing {@link #cloneInContext}. -     *  -     * @param original The original inflater to copy. -     * @param newContext The new Context to use. -     */ -    protected GenericInflater(GenericInflater<T,P> original, Context newContext) { -        mContext = newContext; -        mFactory = original.mFactory; -    } -     -    /** -     * Create a copy of the existing inflater object, with the copy -     * pointing to a different Context than the original.  This is used by -     * {@link ContextThemeWrapper} to create a new inflater to go along -     * with the new Context theme. -     *  -     * @param newContext The new Context to associate with the new inflater. -     * May be the same as the original Context if desired. -     *  -     * @return Returns a brand spanking new inflater object associated with -     * the given Context. -     */ -    public abstract GenericInflater cloneInContext(Context newContext); -     -    /** -     * Sets the default package that will be searched for classes to construct -     * for tag names that have no explicit package. -     *  -     * @param defaultPackage The default package. This will be prepended to the -     *            tag name, so it should end with a period. -     */ -    public void setDefaultPackage(String defaultPackage) { -        mDefaultPackage = defaultPackage; -    } -     -    /** -     * Returns the default package, or null if it is not set. -     *  -     * @see #setDefaultPackage(String) -     * @return The default package. -     */ -    public String getDefaultPackage() { -        return mDefaultPackage; -    } -     -    /** -     * Return the context we are running in, for access to resources, class -     * loader, etc. -     */ -    public Context getContext() { -        return mContext; -    } - -    /** -     * Return the current factory (or null). This is called on each element -     * name. If the factory returns an item, add that to the hierarchy. If it -     * returns null, proceed to call onCreateItem(name). -     */ -    public final Factory<T> getFactory() { -        return mFactory; -    } - -    /** -     * Attach a custom Factory interface for creating items while using this -     * inflater. This must not be null, and can only be set -     * once; after setting, you can not change the factory. This is called on -     * each element name as the XML is parsed. If the factory returns an item, -     * that is added to the hierarchy. If it returns null, the next factory -     * default {@link #onCreateItem} method is called. -     * <p> -     * If you have an existing inflater and want to add your -     * own factory to it, use {@link #cloneInContext} to clone the existing -     * instance and then you can use this function (once) on the returned new -     * instance. This will merge your own factory with whatever factory the -     * original instance is using. -     */ -    public void setFactory(Factory<T> factory) { -        if (mFactorySet) { -            throw new IllegalStateException("" + -            		"A factory has already been set on this inflater"); -        } -        if (factory == null) { -            throw new NullPointerException("Given factory can not be null"); -        } -        mFactorySet = true; -        if (mFactory == null) { -            mFactory = factory; -        } else { -            mFactory = new FactoryMerger<T>(factory, mFactory); -        } -    } - - -    /** -     * Inflate a new item hierarchy from the specified xml resource. Throws -     * InflaterException if there is an error. -     *  -     * @param resource ID for an XML resource to load (e.g., -     *        <code>R.layout.main_page</code>) -     * @param root Optional parent of the generated hierarchy. -     * @return The root of the inflated hierarchy. If root was supplied, -     *         this is the root item; otherwise it is the root of the inflated -     *         XML file. -     */ -    public T inflate(int resource, P root) { -        return inflate(resource, root, root != null); -    } - -    /** -     * Inflate a new hierarchy from the specified xml node. Throws -     * InflaterException if there is an error. * -     * <p> -     * <em><strong>Important</strong></em>   For performance -     * reasons, inflation relies heavily on pre-processing of XML files -     * that is done at build time. Therefore, it is not currently possible to -     * use inflater with an XmlPullParser over a plain XML file at runtime. -     *  -     * @param parser XML dom node containing the description of the -     *        hierarchy. -     * @param root Optional parent of the generated hierarchy. -     * @return The root of the inflated hierarchy. If root was supplied, -     *         this is the that; otherwise it is the root of the inflated -     *         XML file. -     */ -    public T inflate(XmlPullParser parser, P root) { -        return inflate(parser, root, root != null); -    } - -    /** -     * Inflate a new hierarchy from the specified xml resource. Throws -     * InflaterException if there is an error. -     *  -     * @param resource ID for an XML resource to load (e.g., -     *        <code>R.layout.main_page</code>) -     * @param root Optional root to be the parent of the generated hierarchy (if -     *        <em>attachToRoot</em> is true), or else simply an object that -     *        provides a set of values for root of the returned -     *        hierarchy (if <em>attachToRoot</em> is false.) -     * @param attachToRoot Whether the inflated hierarchy should be attached to -     *        the root parameter? -     * @return The root of the inflated hierarchy. If root was supplied and -     *         attachToRoot is true, this is root; otherwise it is the root of -     *         the inflated XML file. -     */ -    public T inflate(int resource, P root, boolean attachToRoot) { -        if (DEBUG) System.out.println("INFLATING from resource: " + resource); -        XmlResourceParser parser = getContext().getResources().getXml(resource); -        try { -            return inflate(parser, root, attachToRoot); -        } finally { -            parser.close(); -        } -    } - -    /** -     * Inflate a new hierarchy from the specified XML node. Throws -     * InflaterException if there is an error. -     * <p> -     * <em><strong>Important</strong></em>   For performance -     * reasons, inflation relies heavily on pre-processing of XML files -     * that is done at build time. Therefore, it is not currently possible to -     * use inflater with an XmlPullParser over a plain XML file at runtime. -     *  -     * @param parser XML dom node containing the description of the -     *        hierarchy. -     * @param root Optional to be the parent of the generated hierarchy (if -     *        <em>attachToRoot</em> is true), or else simply an object that -     *        provides a set of values for root of the returned -     *        hierarchy (if <em>attachToRoot</em> is false.) -     * @param attachToRoot Whether the inflated hierarchy should be attached to -     *        the root parameter? -     * @return The root of the inflated hierarchy. If root was supplied and -     *         attachToRoot is true, this is root; otherwise it is the root of -     *         the inflated XML file. -     */ -    public T inflate(XmlPullParser parser, P root, -            boolean attachToRoot) { -        synchronized (mConstructorArgs) { -            final AttributeSet attrs = Xml.asAttributeSet(parser); -            mConstructorArgs[0] = mContext; -            T result = (T) root; - -            try { -                // Look for the root node. -                int type; -                while ((type = parser.next()) != parser.START_TAG -                        && type != parser.END_DOCUMENT) { -                    ; -                } - -                if (type != parser.START_TAG) { -                    throw new InflateException(parser.getPositionDescription() -                            + ": No start tag found!"); -                } - -                if (DEBUG) { -                    System.out.println("**************************"); -                    System.out.println("Creating root: " -                            + parser.getName()); -                    System.out.println("**************************"); -                } -                // Temp is the root that was found in the xml -                T xmlRoot = createItemFromTag(parser, parser.getName(), -                        attrs); - -                result = (T) onMergeRoots(root, attachToRoot, (P) xmlRoot); -                 -                if (DEBUG) { -                    System.out.println("-----> start inflating children"); -                } -                // Inflate all children under temp -                rInflate(parser, result, attrs); -                if (DEBUG) { -                    System.out.println("-----> done inflating children"); -                } - -            } catch (InflateException e) { -                throw e; - -            } catch (XmlPullParserException e) { -                InflateException ex = new InflateException(e.getMessage()); -                ex.initCause(e); -                throw ex; -            } catch (IOException e) { -                InflateException ex = new InflateException( -                        parser.getPositionDescription() -                        + ": " + e.getMessage()); -                ex.initCause(e); -                throw ex; -            } - -            return result; -        } -    } - -    /** -     * Low-level function for instantiating by name. This attempts to -     * instantiate class of the given <var>name</var> found in this -     * inflater's ClassLoader. -     *  -     * <p> -     * There are two things that can happen in an error case: either the -     * exception describing the error will be thrown, or a null will be -     * returned. You must deal with both possibilities -- the former will happen -     * the first time createItem() is called for a class of a particular name, -     * the latter every time there-after for that class name. -     *  -     * @param name The full name of the class to be instantiated. -     * @param attrs The XML attributes supplied for this instance. -     *  -     * @return The newly instantied item, or null. -     */ -    public final T createItem(String name, String prefix, AttributeSet attrs) -            throws ClassNotFoundException, InflateException { -        Constructor constructor = (Constructor) sConstructorMap.get(name); - -        try { -            if (null == constructor) { -                // Class not found in the cache, see if it's real, -                // and try to add it -                Class clazz = mContext.getClassLoader().loadClass( -                        prefix != null ? (prefix + name) : name); -                constructor = clazz.getConstructor(mConstructorSignature); -                sConstructorMap.put(name, constructor); -            } - -            Object[] args = mConstructorArgs; -            args[1] = attrs; -            return (T) constructor.newInstance(args); - -        } catch (NoSuchMethodException e) { -            InflateException ie = new InflateException(attrs -                    .getPositionDescription() -                    + ": Error inflating class " -                    + (prefix != null ? (prefix + name) : name)); -            ie.initCause(e); -            throw ie; - -        } catch (ClassNotFoundException e) { -            // If loadClass fails, we should propagate the exception. -            throw e; -        } catch (Exception e) { -            InflateException ie = new InflateException(attrs -                    .getPositionDescription() -                    + ": Error inflating class " -                    + constructor.getClass().getName()); -            ie.initCause(e); -            throw ie; -        } -    } - -    /** -     * This routine is responsible for creating the correct subclass of item -     * given the xml element name. Override it to handle custom item objects. If -     * you override this in your subclass be sure to call through to -     * super.onCreateItem(name) for names you do not recognize. -     *  -     * @param name The fully qualified class name of the item to be create. -     * @param attrs An AttributeSet of attributes to apply to the item. -     * @return The item created. -     */ -    protected T onCreateItem(String name, AttributeSet attrs) throws ClassNotFoundException { -        return createItem(name, mDefaultPackage, attrs); -    } - -    private final T createItemFromTag(XmlPullParser parser, String name, AttributeSet attrs) { -        if (DEBUG) System.out.println("******** Creating item: " + name); - -        try { -            T item = (mFactory == null) ? null : mFactory.onCreateItem(name, mContext, attrs); - -            if (item == null) { -                if (-1 == name.indexOf('.')) { -                    item = onCreateItem(name, attrs); -                } else { -                    item = createItem(name, null, attrs); -                } -            } - -            if (DEBUG) System.out.println("Created item is: " + item); -            return item; - -        } catch (InflateException e) { -            throw e; - -        } catch (ClassNotFoundException e) { -            InflateException ie = new InflateException(attrs -                    .getPositionDescription() -                    + ": Error inflating class " + name); -            ie.initCause(e); -            throw ie; - -        } catch (Exception e) { -            InflateException ie = new InflateException(attrs -                    .getPositionDescription() -                    + ": Error inflating class " + name); -            ie.initCause(e); -            throw ie; -        } -    } - -    /** -     * Recursive method used to descend down the xml hierarchy and instantiate -     * items, instantiate their children, and then call onFinishInflate(). -     */ -    private void rInflate(XmlPullParser parser, T parent, final AttributeSet attrs) -            throws XmlPullParserException, IOException { -        final int depth = parser.getDepth(); - -        int type; -        while (((type = parser.next()) != parser.END_TAG ||  -                parser.getDepth() > depth) && type != parser.END_DOCUMENT) { - -            if (type != parser.START_TAG) { -                continue; -            } - -            if (onCreateCustomFromTag(parser, parent, attrs)) { -                continue; -            } - -            if (DEBUG) { -                System.out.println("Now inflating tag: " + parser.getName()); -            } -            String name = parser.getName(); - -            T item = createItemFromTag(parser, name, attrs); - -            if (DEBUG) { -                System.out -                        .println("Creating params from parent: " + parent); -            } - -            ((P) parent).addItemFromInflater(item); - -            if (DEBUG) { -                System.out.println("-----> start inflating children"); -            } -            rInflate(parser, item, attrs); -            if (DEBUG) { -                System.out.println("-----> done inflating children"); -            } -        } - -    } -     -    /** -     * Before this inflater tries to create an item from the tag, this method -     * will be called. The parser will be pointing to the start of a tag, you -     * must stop parsing and return when you reach the end of this element! -     *  -     * @param parser XML dom node containing the description of the hierarchy. -     * @param parent The item that should be the parent of whatever you create. -     * @param attrs An AttributeSet of attributes to apply to the item. -     * @return Whether you created a custom object (true), or whether this -     *         inflater should proceed to create an item. -     */ -    protected boolean onCreateCustomFromTag(XmlPullParser parser, T parent, -            final AttributeSet attrs) throws XmlPullParserException { -        return false; -    } -     -    protected P onMergeRoots(P givenRoot, boolean attachToGivenRoot, P xmlRoot) { -        return xmlRoot; -    } -} diff --git a/core/java/android/preference/ListPreference.java b/core/java/android/preference/ListPreference.java deleted file mode 100644 index f842d75..0000000 --- a/core/java/android/preference/ListPreference.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - - -import android.app.AlertDialog.Builder; -import android.content.Context; -import android.content.DialogInterface; -import android.content.res.TypedArray; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.AttributeSet; - -/** - * A {@link Preference} that displays a list of entries as - * a dialog. - * <p> - * This preference will store a string into the SharedPreferences. This string will be the value - * from the {@link #setEntryValues(CharSequence[])} array. - *  - * @attr ref android.R.styleable#ListPreference_entries - * @attr ref android.R.styleable#ListPreference_entryValues - */ -public class ListPreference extends DialogPreference { -    private CharSequence[] mEntries; -    private CharSequence[] mEntryValues; -    private String mValue; -    private int mClickedDialogEntryIndex; -     -    public ListPreference(Context context, AttributeSet attrs) { -        super(context, attrs); -         -        TypedArray a = context.obtainStyledAttributes(attrs, -                com.android.internal.R.styleable.ListPreference, 0, 0); -        mEntries = a.getTextArray(com.android.internal.R.styleable.ListPreference_entries); -        mEntryValues = a.getTextArray(com.android.internal.R.styleable.ListPreference_entryValues); -        a.recycle(); -    } -     -    public ListPreference(Context context) { -        this(context, null); -    } - -    /** -     * Sets the human-readable entries to be shown in the list. This will be -     * shown in subsequent dialogs. -     * <p> -     * Each entry must have a corresponding index in -     * {@link #setEntryValues(CharSequence[])}. -     *  -     * @param entries The entries. -     * @see #setEntryValues(CharSequence[]) -     */ -    public void setEntries(CharSequence[] entries) { -        mEntries = entries; -    } -     -    /** -     * @see #setEntries(CharSequence[]) -     * @param entriesResId The entries array as a resource. -     */ -    public void setEntries(int entriesResId) { -        setEntries(getContext().getResources().getTextArray(entriesResId)); -    } -     -    /** -     * The list of entries to be shown in the list in subsequent dialogs. -     *  -     * @return The list as an array. -     */ -    public CharSequence[] getEntries() { -        return mEntries; -    } -     -    /** -     * The array to find the value to save for a preference when an entry from -     * entries is selected. If a user clicks on the second item in entries, the -     * second item in this array will be saved to the preference. -     *  -     * @param entryValues The array to be used as values to save for the preference. -     */ -    public void setEntryValues(CharSequence[] entryValues) { -        mEntryValues = entryValues; -    } - -    /** -     * @see #setEntryValues(CharSequence[]) -     * @param entryValuesResId The entry values array as a resource. -     */ -    public void setEntryValues(int entryValuesResId) { -        setEntryValues(getContext().getResources().getTextArray(entryValuesResId)); -    } -     -    /** -     * Returns the array of values to be saved for the preference. -     *  -     * @return The array of values. -     */ -    public CharSequence[] getEntryValues() { -        return mEntryValues; -    } - -    /** -     * Sets the value of the key. This should be one of the entries in -     * {@link #getEntryValues()}. -     *  -     * @param value The value to set for the key. -     */ -    public void setValue(String value) { -        mValue = value; -         -        persistString(value); -    } - -    /** -     * Sets the value to the given index from the entry values. -     *  -     * @param index The index of the value to set. -     */ -    public void setValueIndex(int index) { -        if (mEntryValues != null) { -            setValue(mEntryValues[index].toString()); -        } -    } -     -    /** -     * Returns the value of the key. This should be one of the entries in -     * {@link #getEntryValues()}. -     *  -     * @return The value of the key. -     */ -    public String getValue() { -        return mValue;  -    } -     -    /** -     * Returns the entry corresponding to the current value. -     *  -     * @return The entry corresponding to the current value, or null. -     */ -    public CharSequence getEntry() { -        int index = getValueIndex(); -        return index >= 0 && mEntries != null ? mEntries[index] : null; -    } -     -    /** -     * Returns the index of the given value (in the entry values array). -     *  -     * @param value The value whose index should be returned. -     * @return The index of the value, or -1 if not found. -     */ -    public int findIndexOfValue(String value) { -        if (value != null && mEntryValues != null) { -            for (int i = mEntryValues.length - 1; i >= 0; i--) { -                if (mEntryValues[i].equals(value)) { -                    return i; -                } -            } -        } -        return -1; -    } -     -    private int getValueIndex() { -        return findIndexOfValue(mValue); -    } -     -    @Override -    protected void onPrepareDialogBuilder(Builder builder) { -        super.onPrepareDialogBuilder(builder); -         -        if (mEntries == null || mEntryValues == null) { -            throw new IllegalStateException( -                    "ListPreference requires an entries array and an entryValues array."); -        } - -        mClickedDialogEntryIndex = getValueIndex(); -        builder.setSingleChoiceItems(mEntries, mClickedDialogEntryIndex,  -                new DialogInterface.OnClickListener() { -                    public void onClick(DialogInterface dialog, int which) { -                        mClickedDialogEntryIndex = which; - -                        /* -                         * Clicking on an item simulates the positive button -                         * click, and dismisses the dialog. -                         */ -                        ListPreference.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE); -                        dialog.dismiss(); -                    } -        }); -         -        /* -         * The typical interaction for list-based dialogs is to have -         * click-on-an-item dismiss the dialog instead of the user having to -         * press 'Ok'. -         */ -        builder.setPositiveButton(null, null); -    } - -    @Override -    protected void onDialogClosed(boolean positiveResult) { -        super.onDialogClosed(positiveResult); -         -        if (positiveResult && mClickedDialogEntryIndex >= 0 && mEntryValues != null) { -            String value = mEntryValues[mClickedDialogEntryIndex].toString(); -            if (callChangeListener(value)) { -                setValue(value); -            } -        } -    } - -    @Override -    protected Object onGetDefaultValue(TypedArray a, int index) { -        return a.getString(index); -    } - -    @Override -    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { -        setValue(restoreValue ? getPersistedString(mValue) : (String) defaultValue); -    } -     -    @Override -    protected Parcelable onSaveInstanceState() { -        final Parcelable superState = super.onSaveInstanceState(); -        if (isPersistent()) { -            // No need to save instance state since it's persistent -            return superState; -        } -         -        final SavedState myState = new SavedState(superState); -        myState.value = getValue(); -        return myState; -    } - -    @Override -    protected void onRestoreInstanceState(Parcelable state) { -        if (state == null || !state.getClass().equals(SavedState.class)) { -            // Didn't save state for us in onSaveInstanceState -            super.onRestoreInstanceState(state); -            return; -        } -          -        SavedState myState = (SavedState) state; -        super.onRestoreInstanceState(myState.getSuperState()); -        setValue(myState.value); -    } -     -    private static class SavedState extends BaseSavedState { -        String value; -         -        public SavedState(Parcel source) { -            super(source); -            value = source.readString(); -        } - -        @Override -        public void writeToParcel(Parcel dest, int flags) { -            super.writeToParcel(dest, flags); -            dest.writeString(value); -        } - -        public SavedState(Parcelable superState) { -            super(superState); -        } - -        public static final Parcelable.Creator<SavedState> CREATOR = -                new Parcelable.Creator<SavedState>() { -            public SavedState createFromParcel(Parcel in) { -                return new SavedState(in); -            } - -            public SavedState[] newArray(int size) { -                return new SavedState[size]; -            } -        }; -    } -     -} diff --git a/core/java/android/preference/OnDependencyChangeListener.java b/core/java/android/preference/OnDependencyChangeListener.java deleted file mode 100644 index ce25e34..0000000 --- a/core/java/android/preference/OnDependencyChangeListener.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -/** - * Interface definition for a callback to be invoked when this - * {@link Preference} changes with respect to enabling/disabling - * dependents. - */ -interface OnDependencyChangeListener { -    /** -     * Called when this preference has changed in a way that dependents should -     * care to change their state. -     *  -     * @param disablesDependent Whether the dependent should be disabled. -     */ -    void onDependencyChanged(Preference dependency, boolean disablesDependent); -} diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java deleted file mode 100644 index a255438..0000000 --- a/core/java/android/preference/Preference.java +++ /dev/null @@ -1,1586 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import java.util.ArrayList; -import java.util.List; - -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.TypedArray; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import android.text.TextUtils; -import android.util.AttributeSet; -import com.android.internal.util.CharSequences; -import android.view.AbsSavedState; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ListView; -import android.widget.TextView; - -/** - * Represents the basic Preference UI building - * block displayed by a {@link PreferenceActivity} in the form of a - * {@link ListView}. This class provides the {@link View} to be displayed in - * the activity and associates with a {@link SharedPreferences} to - * store/retrieve the preference data. - * <p> - * When specifying a preference hierarchy in XML, each element can point to a - * subclass of {@link Preference}, similar to the view hierarchy and layouts. - * <p> - * This class contains a {@code key} that will be used as the key into the - * {@link SharedPreferences}. It is up to the subclass to decide how to store - * the value. - *  - * @attr ref android.R.styleable#Preference_key - * @attr ref android.R.styleable#Preference_title - * @attr ref android.R.styleable#Preference_summary - * @attr ref android.R.styleable#Preference_order - * @attr ref android.R.styleable#Preference_layout - * @attr ref android.R.styleable#Preference_widgetLayout - * @attr ref android.R.styleable#Preference_enabled - * @attr ref android.R.styleable#Preference_selectable - * @attr ref android.R.styleable#Preference_dependency - * @attr ref android.R.styleable#Preference_persistent - * @attr ref android.R.styleable#Preference_defaultValue - * @attr ref android.R.styleable#Preference_shouldDisableView - */ -public class Preference implements Comparable<Preference>, OnDependencyChangeListener {  -    /** -     * Specify for {@link #setOrder(int)} if a specific order is not required. -     */ -    public static final int DEFAULT_ORDER = Integer.MAX_VALUE; - -    private Context mContext; -    private PreferenceManager mPreferenceManager; -     -    /** -     * Set when added to hierarchy since we need a unique ID within that -     * hierarchy. -     */ -    private long mId; -     -    private OnPreferenceChangeListener mOnChangeListener; -    private OnPreferenceClickListener mOnClickListener; - -    private int mOrder = DEFAULT_ORDER; -    private CharSequence mTitle; -    private CharSequence mSummary; -    private String mKey; -    private Intent mIntent; -    private boolean mEnabled = true; -    private boolean mSelectable = true; -    private boolean mRequiresKey; -    private boolean mPersistent = true; -    private String mDependencyKey; -    private Object mDefaultValue; -     -    /** -     * @see #setShouldDisableView(boolean) -     */ -    private boolean mShouldDisableView = true; -     -    private int mLayoutResId = com.android.internal.R.layout.preference; -    private int mWidgetLayoutResId; -    private boolean mHasSpecifiedLayout = false; -     -    private OnPreferenceChangeInternalListener mListener; -     -    private List<Preference> mDependents; -     -    private boolean mBaseMethodCalled; -     -    /** -     * Interface definition for a callback to be invoked when the value of this -     * {@link Preference} has been changed by the user and is -     * about to be set and/or persisted.  This gives the client a chance -     * to prevent setting and/or persisting the value. -     */ -    public interface OnPreferenceChangeListener { -        /** -         * Called when a Preference has been changed by the user. This is -         * called before the state of the Preference is about to be updated and -         * before the state is persisted. -         *  -         * @param preference The changed Preference. -         * @param newValue The new value of the Preference. -         * @return True to update the state of the Preference with the new value. -         */ -        boolean onPreferenceChange(Preference preference, Object newValue); -    } - -    /** -     * Interface definition for a callback to be invoked when a {@link Preference} is -     * clicked. -     */ -    public interface OnPreferenceClickListener { -        /** -         * Called when a Preference has been clicked. -         * -         * @param preference The Preference that was clicked. -         * @return True if the click was handled. -         */ -        boolean onPreferenceClick(Preference preference); -    } - -    /** -     * Interface definition for a callback to be invoked when this -     * {@link Preference} is changed or, if this is a group, there is an -     * addition/removal of {@link Preference}(s). This is used internally. -     */ -    interface OnPreferenceChangeInternalListener { -        /** -         * Called when this Preference has changed. -         *  -         * @param preference This preference. -         */ -        void onPreferenceChange(Preference preference); -         -        /** -         * Called when this group has added/removed {@link Preference}(s). -         *  -         * @param preference This Preference. -         */ -        void onPreferenceHierarchyChange(Preference preference); -    } - -    /** -     * Perform inflation from XML and apply a class-specific base style. This -     * constructor of Preference allows subclasses to use their own base -     * style when they are inflating. For example, a {@link CheckBoxPreference} -     * constructor calls this version of the super class constructor and -     * supplies {@code android.R.attr.checkBoxPreferenceStyle} for <var>defStyle</var>. -     * This allows the theme's checkbox preference style to modify all of the base -     * preference attributes as well as the {@link CheckBoxPreference} class's -     * attributes. -     *  -     * @param context The Context this is associated with, through which it can -     *            access the current theme, resources, {@link SharedPreferences}, -     *            etc. -     * @param attrs The attributes of the XML tag that is inflating the preference. -     * @param defStyle The default style to apply to this preference. If 0, no style -     *            will be applied (beyond what is included in the theme). This -     *            may either be an attribute resource, whose value will be -     *            retrieved from the current theme, or an explicit style -     *            resource. -     * @see #Preference(Context, AttributeSet) -     */ -    public Preference(Context context, AttributeSet attrs, int defStyle) { -        mContext = context; - -        TypedArray a = context.obtainStyledAttributes(attrs, -                com.android.internal.R.styleable.Preference); -        if (a.hasValue(com.android.internal.R.styleable.Preference_layout) || -                a.hasValue(com.android.internal.R.styleable.Preference_widgetLayout)) { -            // This preference has a custom layout defined (not one taken from -            // the default style) -            mHasSpecifiedLayout = true; -        } -        a.recycle(); -         -        a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Preference, -                defStyle, 0); -        for (int i = a.getIndexCount(); i >= 0; i--) { -            int attr = a.getIndex(i);  -            switch (attr) { -                case com.android.internal.R.styleable.Preference_key: -                    mKey = a.getString(attr); -                    break; -                     -                case com.android.internal.R.styleable.Preference_title: -                    mTitle = a.getString(attr); -                    break; -                     -                case com.android.internal.R.styleable.Preference_summary: -                    mSummary = a.getString(attr); -                    break; -                     -                case com.android.internal.R.styleable.Preference_order: -                    mOrder = a.getInt(attr, mOrder); -                    break; - -                case com.android.internal.R.styleable.Preference_layout: -                    mLayoutResId = a.getResourceId(attr, mLayoutResId); -                    break; - -                case com.android.internal.R.styleable.Preference_widgetLayout: -                    mWidgetLayoutResId = a.getResourceId(attr, mWidgetLayoutResId); -                    break; -                     -                case com.android.internal.R.styleable.Preference_enabled: -                    mEnabled = a.getBoolean(attr, true); -                    break; -                     -                case com.android.internal.R.styleable.Preference_selectable: -                    mSelectable = a.getBoolean(attr, true); -                    break; -                     -                case com.android.internal.R.styleable.Preference_persistent: -                    mPersistent = a.getBoolean(attr, mPersistent); -                    break; -                     -                case com.android.internal.R.styleable.Preference_dependency: -                    mDependencyKey = a.getString(attr); -                    break; -                     -                case com.android.internal.R.styleable.Preference_defaultValue: -                    mDefaultValue = onGetDefaultValue(a, attr); -                    break; -                     -                case com.android.internal.R.styleable.Preference_shouldDisableView: -                    mShouldDisableView = a.getBoolean(attr, mShouldDisableView); -                    break; -            } -        } -        a.recycle(); -    } -     -    /** -     * Constructor that is called when inflating a Preference from XML. This is -     * called when a Preference is being constructed from an XML file, supplying -     * attributes that were specified in the XML file. This version uses a -     * default style of 0, so the only attribute values applied are those in the -     * Context's Theme and the given AttributeSet. -     *  -     * @param context The Context this is associated with, through which it can -     *            access the current theme, resources, {@link SharedPreferences}, -     *            etc. -     * @param attrs The attributes of the XML tag that is inflating the -     *            preference. -     * @see #Preference(Context, AttributeSet, int) -     */ -    public Preference(Context context, AttributeSet attrs) { -        this(context, attrs, 0); -    } - -    /** -     * Constructor to create a Preference. -     *  -     * @param context The Context in which to store Preference values. -     */ -    public Preference(Context context) { -        this(context, null); -    } - -    /** -     * Called when a Preference is being inflated and the default value -     * attribute needs to be read. Since different Preference types have -     * different value types, the subclass should get and return the default -     * value which will be its value type. -     * <p> -     * For example, if the value type is String, the body of the method would -     * proxy to {@link TypedArray#getString(int)}. -     *  -     * @param a The set of attributes. -     * @param index The index of the default value attribute. -     * @return The default value of this preference type. -     */ -    protected Object onGetDefaultValue(TypedArray a, int index) { -        return null; -    } -     -    /** -     * Sets an {@link Intent} to be used for -     * {@link Context#startActivity(Intent)} when this Preference is clicked. -     *  -     * @param intent The intent associated with this Preference. -     */ -    public void setIntent(Intent intent) { -        mIntent = intent; -    } -     -    /** -     * Return the {@link Intent} associated with this Preference. -     *  -     * @return The {@link Intent} last set via {@link #setIntent(Intent)} or XML.  -     */ -    public Intent getIntent() { -        return mIntent; -    } - -    /** -     * Sets the layout resource that is inflated as the {@link View} to be shown -     * for this Preference. In most cases, the default layout is sufficient for -     * custom Preference objects and only the widget layout needs to be changed. -     * <p> -     * This layout should contain a {@link ViewGroup} with ID -     * {@link android.R.id#widget_frame} to be the parent of the specific widget -     * for this Preference. It should similarly contain -     * {@link android.R.id#title} and {@link android.R.id#summary}. -     *  -     * @param layoutResId The layout resource ID to be inflated and returned as -     *            a {@link View}. -     * @see #setWidgetLayoutResource(int) -     */ -    public void setLayoutResource(int layoutResId) { -         -        if (!mHasSpecifiedLayout) { -            mHasSpecifiedLayout = true; -        } -         -        mLayoutResId = layoutResId; -    } -     -    /** -     * Gets the layout resource that will be shown as the {@link View} for this Preference. -     *  -     * @return The layout resource ID. -     */ -    public int getLayoutResource() { -        return mLayoutResId; -    } -     -    /** -     * Sets The layout for the controllable widget portion of this Preference. This -     * is inflated into the main layout. For example, a {@link CheckBoxPreference} -     * would specify a custom layout (consisting of just the CheckBox) here, -     * instead of creating its own main layout. -     *  -     * @param widgetLayoutResId The layout resource ID to be inflated into the -     *            main layout. -     * @see #setLayoutResource(int) -     */ -    public void setWidgetLayoutResource(int widgetLayoutResId) { -        mWidgetLayoutResId = widgetLayoutResId; -    } - -    /** -     * Gets the layout resource for the controllable widget portion of this Preference. -     *  -     * @return The layout resource ID. -     */ -    public int getWidgetLayoutResource() { -        return mWidgetLayoutResId; -    } -     -    /** -     * Gets the View that will be shown in the {@link PreferenceActivity}. -     *  -     * @param convertView The old View to reuse, if possible. Note: You should -     *            check that this View is non-null and of an appropriate type -     *            before using. If it is not possible to convert this View to -     *            display the correct data, this method can create a new View. -     * @param parent The parent that this View will eventually be attached to. -     * @return Returns the same Preference object, for chaining multiple calls -     *         into a single statement. -     * @see #onCreateView(ViewGroup) -     * @see #onBindView(View) -     */ -    public View getView(View convertView, ViewGroup parent) { -        if (convertView == null) { -            convertView = onCreateView(parent); -        } -        onBindView(convertView); -        return convertView; -    } -     -    /** -     * Creates the View to be shown for this Preference in the -     * {@link PreferenceActivity}. The default behavior is to inflate the main -     * layout of this Preference (see {@link #setLayoutResource(int)}. If -     * changing this behavior, please specify a {@link ViewGroup} with ID -     * {@link android.R.id#widget_frame}. -     * <p> -     * Make sure to call through to the superclass's implementation. -     *  -     * @param parent The parent that this View will eventually be attached to. -     * @return The View that displays this Preference. -     * @see #onBindView(View) -     */ -    protected View onCreateView(ViewGroup parent) { -        final LayoutInflater layoutInflater = -            (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); -         -        final View layout = layoutInflater.inflate(mLayoutResId, parent, false);  -         -        if (mWidgetLayoutResId != 0) { -            final ViewGroup widgetFrame = (ViewGroup)layout.findViewById(com.android.internal.R.id.widget_frame); -            layoutInflater.inflate(mWidgetLayoutResId, widgetFrame); -        } - -        return layout; -    } -     -    /** -     * Binds the created View to the data for this Preference. -     * <p> -     * This is a good place to grab references to custom Views in the layout and -     * set properties on them. -     * <p> -     * Make sure to call through to the superclass's implementation. -     *  -     * @param view The View that shows this Preference. -     * @see #onCreateView(ViewGroup) -     */ -    protected void onBindView(View view) { -        TextView textView = (TextView) view.findViewById(com.android.internal.R.id.title);  -        if (textView != null) { -            textView.setText(getTitle()); -        } -         -        textView = (TextView) view.findViewById(com.android.internal.R.id.summary); -        if (textView != null) { -            final CharSequence summary = getSummary(); -            if (!TextUtils.isEmpty(summary)) { -                if (textView.getVisibility() != View.VISIBLE) { -                    textView.setVisibility(View.VISIBLE); -                } -                 -                textView.setText(getSummary()); -            } else { -                if (textView.getVisibility() != View.GONE) { -                    textView.setVisibility(View.GONE); -                } -            } -        } -         -        if (mShouldDisableView) { -            setEnabledStateOnViews(view, isEnabled()); -        } -    } -     -    /** -     * Makes sure the view (and any children) get the enabled state changed. -     */ -    private void setEnabledStateOnViews(View v, boolean enabled) { -        v.setEnabled(enabled); -         -        if (v instanceof ViewGroup) { -            final ViewGroup vg = (ViewGroup) v; -            for (int i = vg.getChildCount() - 1; i >= 0; i--) { -                setEnabledStateOnViews(vg.getChildAt(i), enabled); -            } -        } -    } -     -    /** -     * Sets the order of this Preference with respect to other -     * Preference objects on the same level. If this is not specified, the -     * default behavior is to sort alphabetically. The -     * {@link PreferenceGroup#setOrderingAsAdded(boolean)} can be used to order -     * Preference objects based on the order they appear in the XML. -     *  -     * @param order The order for this Preference. A lower value will be shown -     *            first. Use {@link #DEFAULT_ORDER} to sort alphabetically or -     *            allow ordering from XML. -     * @see PreferenceGroup#setOrderingAsAdded(boolean) -     * @see #DEFAULT_ORDER -     */ -    public void setOrder(int order) { -        if (order != mOrder) { -            mOrder = order; - -            // Reorder the list  -            notifyHierarchyChanged(); -        } -    } -     -    /** -     * Gets the order of this Preference with respect to other Preference objects -     * on the same level. -     *  -     * @return The order of this Preference. -     * @see #setOrder(int) -     */ -    public int getOrder() { -        return mOrder; -    } - -    /** -     * Sets the title for this Preference with a CharSequence.  -     * This title will be placed into the ID -     * {@link android.R.id#title} within the View created by -     * {@link #onCreateView(ViewGroup)}. -     *  -     * @param title The title for this Preference. -     */ -    public void setTitle(CharSequence title) { -        if (title == null && mTitle != null || title != null && !title.equals(mTitle)) { -            mTitle = title; -            notifyChanged(); -        } -    } -     -    /** -     * Sets the title for this Preference with a resource ID.  -     *  -     * @see #setTitle(CharSequence) -     * @param titleResId The title as a resource ID. -     */ -    public void setTitle(int titleResId) { -        setTitle(mContext.getString(titleResId)); -    } -     -    /** -     * Returns the title of this Preference. -     *  -     * @return The title. -     * @see #setTitle(CharSequence) -     */ -    public CharSequence getTitle() { -        return mTitle; -    } - -    /** -     * Returns the summary of this Preference. -     *  -     * @return The summary. -     * @see #setSummary(CharSequence) -     */ -    public CharSequence getSummary() { -        return mSummary; -    } - -    /** -     * Sets the summary for this Preference with a CharSequence.  -     *  -     * @param summary The summary for the preference. -     */ -    public void setSummary(CharSequence summary) { -        if (summary == null && mSummary != null || summary != null && !summary.equals(mSummary)) { -            mSummary = summary; -            notifyChanged(); -        } -    } - -    /** -     * Sets the summary for this Preference with a resource ID.  -     *  -     * @see #setSummary(CharSequence) -     * @param summaryResId The summary as a resource. -     */ -    public void setSummary(int summaryResId) { -        setSummary(mContext.getString(summaryResId)); -    } -     -    /** -     * Sets whether this Preference is enabled. If disabled, it will -     * not handle clicks. -     *  -     * @param enabled Set true to enable it. -     */ -    public void setEnabled(boolean enabled) { -        if (mEnabled != enabled) { -            mEnabled = enabled; - -            // Enabled state can change dependent preferences' states, so notify -            notifyDependencyChange(shouldDisableDependents()); - -            notifyChanged(); -        } -    } -     -    /** -     * Checks whether this Preference should be enabled in the list. -     *  -     * @return True if this Preference is enabled, false otherwise. -     */ -    public boolean isEnabled() { -        return mEnabled; -    } - -    /** -     * Sets whether this Preference is selectable. -     *  -     * @param selectable Set true to make it selectable. -     */ -    public void setSelectable(boolean selectable) { -        if (mSelectable != selectable) { -            mSelectable = selectable; -            notifyChanged(); -        } -    } -     -    /** -     * Checks whether this Preference should be selectable in the list. -     *  -     * @return True if it is selectable, false otherwise. -     */ -    public boolean isSelectable() { -        return mSelectable; -    } - -    /** -     * Sets whether this Preference should disable its view when it gets -     * disabled. -     * <p> -     * For example, set this and {@link #setEnabled(boolean)} to false for -     * preferences that are only displaying information and 1) should not be -     * clickable 2) should not have the view set to the disabled state. -     *  -     * @param shouldDisableView Set true if this preference should disable its view -     *            when the preference is disabled. -     */ -    public void setShouldDisableView(boolean shouldDisableView) { -        mShouldDisableView = shouldDisableView; -        notifyChanged(); -    } -     -    /** -     * Checks whether this Preference should disable its view when it's action is disabled. -     * @see #setShouldDisableView(boolean) -     * @return True if it should disable the view.  -     */ -    public boolean getShouldDisableView() { -        return mShouldDisableView; -    } - -    /** -     * Returns a unique ID for this Preference.  This ID should be unique across all -     * Preference objects in a hierarchy. -     *  -     * @return A unique ID for this Preference. -     */ -    long getId() { -        return mId; -    } -     -    /** -     * Processes a click on the preference. This includes saving the value to -     * the {@link SharedPreferences}. However, the overridden method should -     * call {@link #callChangeListener(Object)} to make sure the client wants to -     * update the preference's state with the new value. -     */ -    protected void onClick() { -    } -     -    /** -     * Sets the key for this Preference, which is used as a key to the -     * {@link SharedPreferences}. This should be unique for the package. -     *  -     * @param key The key for the preference. -     */ -    public void setKey(String key) { -        mKey = key; -         -        if (mRequiresKey && !hasKey()) { -            requireKey(); -        } -    } -     -    /** -     * Gets the key for this Preference, which is also the key used for storing -     * values into SharedPreferences. -     *  -     * @return The key. -     */ -    public String getKey() { -        return mKey; -    } -     -    /** -     * Checks whether the key is present, and if it isn't throws an -     * exception. This should be called by subclasses that store preferences in -     * the {@link SharedPreferences}. -     *  -     * @throws IllegalStateException If there is no key assigned. -     */ -    void requireKey() { -        if (mKey == null) { -            throw new IllegalStateException("Preference does not have a key assigned."); -        } -         -        mRequiresKey = true; -    } -     -    /** -     * Checks whether this Preference has a valid key. -     *  -     * @return True if the key exists and is not a blank string, false otherwise. -     */ -    public boolean hasKey() { -        return !TextUtils.isEmpty(mKey); -    } -     -    /** -     * Checks whether this Preference is persistent. If it is, it stores its value(s) into -     * the persistent {@link SharedPreferences} storage. -     *  -     * @return True if it is persistent. -     */ -    public boolean isPersistent() { -        return mPersistent; -    } -     -    /** -     * Checks whether, at the given time this method is called, -     * this Preference should store/restore its value(s) into the -     * {@link SharedPreferences}. This, at minimum, checks whether this -     * Preference is persistent and it currently has a key. Before you -     * save/restore from the {@link SharedPreferences}, check this first. -     *  -     * @return True if it should persist the value. -     */ -    protected boolean shouldPersist() { -        return mPreferenceManager != null && isPersistent() && hasKey(); -    } -     -    /** -     * Sets whether this Preference is persistent. When persistent, -     * it stores its value(s) into the persistent {@link SharedPreferences} -     * storage. -     *  -     * @param persistent Set true if it should store its value(s) into the {@link SharedPreferences}. -     */ -    public void setPersistent(boolean persistent) { -        mPersistent = persistent; -    } -     -    /** -     * Call this method after the user changes the preference, but before the -     * internal state is set. This allows the client to ignore the user value. -     *  -     * @param newValue The new value of this Preference. -     * @return True if the user value should be set as the preference -     *         value (and persisted). -     */ -    protected boolean callChangeListener(Object newValue) { -        return mOnChangeListener == null ? true : mOnChangeListener.onPreferenceChange(this, newValue); -    } -     -    /** -     * Sets the callback to be invoked when this Preference is changed by the -     * user (but before the internal state has been updated). -     *  -     * @param onPreferenceChangeListener The callback to be invoked. -     */ -    public void setOnPreferenceChangeListener(OnPreferenceChangeListener onPreferenceChangeListener) { -        mOnChangeListener = onPreferenceChangeListener; -    } - -    /** -     * Returns the callback to be invoked when this Preference is changed by the -     * user (but before the internal state has been updated). -     *  -     * @return The callback to be invoked. -     */ -    public OnPreferenceChangeListener getOnPreferenceChangeListener() { -        return mOnChangeListener; -    } - -    /** -     * Sets the callback to be invoked when this Preference is clicked. -     *  -     * @param onPreferenceClickListener The callback to be invoked. -     */ -    public void setOnPreferenceClickListener(OnPreferenceClickListener onPreferenceClickListener) { -        mOnClickListener = onPreferenceClickListener; -    } - -    /** -     * Returns the callback to be invoked when this Preference is clicked. -     *  -     * @return The callback to be invoked. -     */ -    public OnPreferenceClickListener getOnPreferenceClickListener() { -        return mOnClickListener; -    } - -    /** -     * Called when a click should be performed. -     *  -     * @param preferenceScreen A {@link PreferenceScreen} whose hierarchy click -     *            listener should be called in the proper order (between other -     *            processing). May be null. -     */ -    void performClick(PreferenceScreen preferenceScreen) { -         -        if (!isEnabled()) { -            return; -        } -         -        onClick(); -         -        if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) { -            return; -        } -         -        PreferenceManager preferenceManager = getPreferenceManager(); -        if (preferenceManager != null) { -            PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager -                    .getOnPreferenceTreeClickListener(); -            if (preferenceScreen != null && listener != null -                    && listener.onPreferenceTreeClick(preferenceScreen, this)) { -                return; -            } -        } -         -        if (mIntent != null) { -            Context context = getContext(); -            context.startActivity(mIntent); -        } -    } -     -    /** -     * Returns the {@link android.content.Context} of this Preference.  -     * Each Preference in a Preference hierarchy can be -     * from different Context (for example, if multiple activities provide preferences into a single -     * {@link PreferenceActivity}). This Context will be used to save the Preference values. -     *  -     * @return The Context of this Preference. -     */ -    public Context getContext() { -        return mContext; -    } -     -    /** -     * Returns the {@link SharedPreferences} where this Preference can read its -     * value(s). Usually, it's easier to use one of the helper read methods: -     * {@link #getPersistedBoolean(boolean)}, {@link #getPersistedFloat(float)}, -     * {@link #getPersistedInt(int)}, {@link #getPersistedLong(long)}, -     * {@link #getPersistedString(String)}. To save values, see -     * {@link #getEditor()}. -     * <p> -     * In some cases, writes to the {@link #getEditor()} will not be committed -     * right away and hence not show up in the returned -     * {@link SharedPreferences}, this is intended behavior to improve -     * performance. -     *  -     * @return The {@link SharedPreferences} where this Preference reads its -     *         value(s), or null if it isn't attached to a Preference hierarchy. -     * @see #getEditor() -     */ -    public SharedPreferences getSharedPreferences() { -        if (mPreferenceManager == null) { -            return null; -        } -         -        return mPreferenceManager.getSharedPreferences(); -    } -     -    /** -     * Returns an {@link SharedPreferences.Editor} where this Preference can -     * save its value(s). Usually it's easier to use one of the helper save -     * methods: {@link #persistBoolean(boolean)}, {@link #persistFloat(float)}, -     * {@link #persistInt(int)}, {@link #persistLong(long)}, -     * {@link #persistString(String)}. To read values, see -     * {@link #getSharedPreferences()}. If {@link #shouldCommit()} returns -     * true, it is this Preference's responsibility to commit. -     * <p> -     * In some cases, writes to this will not be committed right away and hence -     * not show up in the SharedPreferences, this is intended behavior to -     * improve performance. -     *  -     * @return A {@link SharedPreferences.Editor} where this preference saves -     *         its value(s), or null if it isn't attached to a Preference -     *         hierarchy. -     * @see #shouldCommit() -     * @see #getSharedPreferences() -     */ -    public SharedPreferences.Editor getEditor() { -        if (mPreferenceManager == null) { -            return null; -        } -         -        return mPreferenceManager.getEditor(); -    } -     -    /** -     * Returns whether the {@link Preference} should commit its saved value(s) in -     * {@link #getEditor()}. This may return false in situations where batch -     * committing is being done (by the manager) to improve performance. -     *  -     * @return Whether the Preference should commit its saved value(s). -     * @see #getEditor() -     */ -    public boolean shouldCommit() { -        if (mPreferenceManager == null) { -            return false; -        } -         -        return mPreferenceManager.shouldCommit(); -    } -     -    /** -     * Compares Preference objects based on order (if set), otherwise alphabetically on the titles. -     *  -     * @param another The Preference to compare to this one. -     * @return 0 if the same; less than 0 if this Preference sorts ahead of <var>another</var>; -     *          greater than 0 if this Preference sorts after <var>another</var>. -     */ -    public int compareTo(Preference another) { -        if (mOrder != DEFAULT_ORDER -                || (mOrder == DEFAULT_ORDER && another.mOrder != DEFAULT_ORDER)) { -            // Do order comparison -            return mOrder - another.mOrder;  -        } else if (mTitle == null) { -            return 1; -        } else if (another.mTitle == null) { -            return -1; -        } else { -            // Do name comparison -            return CharSequences.compareToIgnoreCase(mTitle, another.mTitle); -        } -    } -     -    /** -     * Sets the internal change listener. -     *  -     * @param listener The listener. -     * @see #notifyChanged() -     */ -    final void setOnPreferenceChangeInternalListener(OnPreferenceChangeInternalListener listener) { -        mListener = listener; -    } - -    /** -     * Should be called when the data of this {@link Preference} has changed. -     */ -    protected void notifyChanged() { -        if (mListener != null) { -            mListener.onPreferenceChange(this); -        } -    } -     -    /** -     * Should be called when a Preference has been -     * added/removed from this group, or the ordering should be -     * re-evaluated. -     */ -    protected void notifyHierarchyChanged() { -        if (mListener != null) { -            mListener.onPreferenceHierarchyChange(this); -        } -    } - -    /** -     * Gets the {@link PreferenceManager} that manages this Preference object's tree. -     *  -     * @return The {@link PreferenceManager}. -     */ -    public PreferenceManager getPreferenceManager() { -        return mPreferenceManager; -    } -     -    /** -     * Called when this Preference has been attached to a Preference hierarchy. -     * Make sure to call the super implementation. -     *  -     * @param preferenceManager The PreferenceManager of the hierarchy. -     */ -    protected void onAttachedToHierarchy(PreferenceManager preferenceManager) { -        mPreferenceManager = preferenceManager; -         -        mId = preferenceManager.getNextId(); -         -        dispatchSetInitialValue(); -    } -     -    /** -     * Called when the Preference hierarchy has been attached to the -     * {@link PreferenceActivity}. This can also be called when this -     * Preference has been attached to a group that was already attached -     * to the {@link PreferenceActivity}. -     */ -    protected void onAttachedToActivity() { -        // At this point, the hierarchy that this preference is in is connected -        // with all other preferences. -        registerDependency(); -    } - -    private void registerDependency() { -         -        if (TextUtils.isEmpty(mDependencyKey)) return; -         -        Preference preference = findPreferenceInHierarchy(mDependencyKey); -        if (preference != null) { -            preference.registerDependent(this); -        } else { -            throw new IllegalStateException("Dependency \"" + mDependencyKey -                    + "\" not found for preference \"" + mKey + "\" (title: \"" + mTitle + "\""); -        } -    } - -    private void unregisterDependency() { -        if (mDependencyKey != null) { -            final Preference oldDependency = findPreferenceInHierarchy(mDependencyKey); -            if (oldDependency != null) { -                oldDependency.unregisterDependent(this); -            } -        } -    } -     -    /** -     * Finds a Preference in this hierarchy (the whole thing, -     * even above/below your {@link PreferenceScreen} screen break) with the given -     * key. -     * <p> -     * This only functions after we have been attached to a hierarchy. -     *  -     * @param key The key of the Preference to find. -     * @return The Preference that uses the given key. -     */ -    protected Preference findPreferenceInHierarchy(String key) { -        if (TextUtils.isEmpty(key) || mPreferenceManager == null) { -            return null; -        } -         -        return mPreferenceManager.findPreference(key); -    } -     -    /** -     * Adds a dependent Preference on this Preference so we can notify it. -     * Usually, the dependent Preference registers itself (it's good for it to -     * know it depends on something), so please use -     * {@link Preference#setDependency(String)} on the dependent Preference. -     *  -     * @param dependent The dependent Preference that will be enabled/disabled -     *            according to the state of this Preference. -     */ -    private void registerDependent(Preference dependent) { -        if (mDependents == null) { -            mDependents = new ArrayList<Preference>(); -        } -         -        mDependents.add(dependent); -         -        dependent.onDependencyChanged(this, shouldDisableDependents()); -    } -     -    /** -     * Removes a dependent Preference on this Preference. -     *  -     * @param dependent The dependent Preference that will be enabled/disabled -     *            according to the state of this Preference. -     * @return Returns the same Preference object, for chaining multiple calls -     *         into a single statement. -     */ -    private void unregisterDependent(Preference dependent) { -        if (mDependents != null) { -            mDependents.remove(dependent); -        } -    } -     -    /** -     * Notifies any listening dependents of a change that affects the -     * dependency. -     *  -     * @param disableDependents Whether this Preference should disable -     *            its dependents. -     */ -    public void notifyDependencyChange(boolean disableDependents) { -        final List<Preference> dependents = mDependents; -         -        if (dependents == null) { -            return; -        } -         -        final int dependentsCount = dependents.size(); -        for (int i = 0; i < dependentsCount; i++) { -            dependents.get(i).onDependencyChanged(this, disableDependents); -        } -    } - -    /** -     * Called when the dependency changes. -     *  -     * @param dependency The Preference that this Preference depends on. -     * @param disableDependent Set true to disable this Preference. -     */ -    public void onDependencyChanged(Preference dependency, boolean disableDependent) { -        setEnabled(!disableDependent); -    } -     -    /** -     * Checks whether this preference's dependents should currently be -     * disabled. -     *  -     * @return True if the dependents should be disabled, otherwise false. -     */ -    public boolean shouldDisableDependents() { -        return !isEnabled(); -    } -     -    /** -     * Sets the key of a Preference that this Preference will depend on. If that -     * Preference is not set or is off, this Preference will be disabled. -     *  -     * @param dependencyKey The key of the Preference that this depends on. -     */ -    public void setDependency(String dependencyKey) { -        // Unregister the old dependency, if we had one -        unregisterDependency(); -         -        // Register the new -        mDependencyKey = dependencyKey; -        registerDependency(); -    } -     -    /** -     * Returns the key of the dependency on this Preference. -     *  -     * @return The key of the dependency. -     * @see #setDependency(String) -     */ -    public String getDependency() { -        return mDependencyKey; -    } -     -    /** -     * Called when this Preference is being removed from the hierarchy. You -     * should remove any references to this Preference that you know about. Make -     * sure to call through to the superclass implementation. -     */ -    protected void onPrepareForRemoval() { -        unregisterDependency(); -    } -     -    /** -     * Sets the default value for this Preference, which will be set either if -     * persistence is off or persistence is on and the preference is not found -     * in the persistent storage. -     *  -     * @param defaultValue The default value. -     */ -    public void setDefaultValue(Object defaultValue) { -        mDefaultValue = defaultValue; -    } -     -    private void dispatchSetInitialValue() { -        // By now, we know if we are persistent. -        final boolean shouldPersist = shouldPersist(); -        if (!shouldPersist || !getSharedPreferences().contains(mKey)) { -            if (mDefaultValue != null) { -                onSetInitialValue(false, mDefaultValue); -            } -        } else { -            onSetInitialValue(true, null); -        } -    } -     -    /** -     * Implement this to set the initial value of the Preference.  -     * <p> -     * If <var>restorePersistedValue</var> is true, you should restore the  -     * Preference value from the {@link android.content.SharedPreferences}. If  -     * <var>restorePersistedValue</var> is false, you should set the Preference  -     * value to defaultValue that is given (and possibly store to SharedPreferences  -     * if {@link #shouldPersist()} is true). -     * <p> -     * This may not always be called. One example is if it should not persist -     * but there is no default value given. -     *  -     * @param restorePersistedValue True to restore the persisted value; -     *            false to use the given <var>defaultValue</var>. -     * @param defaultValue The default value for this Preference. Only use this -     *            if <var>restorePersistedValue</var> is false. -     */ -    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { -    } - -    private void tryCommit(SharedPreferences.Editor editor) { -        if (mPreferenceManager.shouldCommit()) { -            editor.commit(); -        } -    } -     -    /** -     * Attempts to persist a String to the {@link android.content.SharedPreferences}. -     * <p> -     * This will check if this Preference is persistent, get an editor from -     * the {@link PreferenceManager}, put in the string, and check if we should commit (and -     * commit if so). -     *  -     * @param value The value to persist. -     * @return True if the Preference is persistent. (This is not whether the -     *         value was persisted, since we may not necessarily commit if there -     *         will be a batch commit later.) -     * @see #getPersistedString(String) -     */ -    protected boolean persistString(String value) { -        if (shouldPersist()) { -            // Shouldn't store null -            if (value == getPersistedString(null)) { -                // It's already there, so the same as persisting -                return true; -            } -             -            SharedPreferences.Editor editor = mPreferenceManager.getEditor(); -            editor.putString(mKey, value); -            tryCommit(editor); -            return true; -        } -        return false; -    } -     -    /** -     * Attempts to get a persisted String from the {@link android.content.SharedPreferences}. -     * <p> -     * This will check if this Preference is persistent, get the SharedPreferences -     * from the {@link PreferenceManager}, and get the value. -     *  -     * @param defaultReturnValue The default value to return if either the -     *            Preference is not persistent or the Preference is not in the -     *            shared preferences. -     * @return The value from the SharedPreferences or the default return -     *         value. -     * @see #persistString(String) -     */ -    protected String getPersistedString(String defaultReturnValue) { -        if (!shouldPersist()) { -            return defaultReturnValue; -        } -         -        return mPreferenceManager.getSharedPreferences().getString(mKey, defaultReturnValue); -    } -     -    /** -     * Attempts to persist an int to the {@link android.content.SharedPreferences}. -     *  -     * @param value The value to persist. -     * @return True if the Preference is persistent. (This is not whether the -     *         value was persisted, since we may not necessarily commit if there -     *         will be a batch commit later.) -     * @see #persistString(String) -     * @see #getPersistedInt(int) -     */ -    protected boolean persistInt(int value) { -        if (shouldPersist()) { -            if (value == getPersistedInt(~value)) { -                // It's already there, so the same as persisting -                return true; -            } -             -            SharedPreferences.Editor editor = mPreferenceManager.getEditor(); -            editor.putInt(mKey, value); -            tryCommit(editor); -            return true; -        } -        return false; -    } -     -    /** -     * Attempts to get a persisted int from the {@link android.content.SharedPreferences}. -     *  -     * @param defaultReturnValue The default value to return if either this -     *            Preference is not persistent or this Preference is not in the -     *            SharedPreferences. -     * @return The value from the SharedPreferences or the default return -     *         value. -     * @see #getPersistedString(String) -     * @see #persistInt(int) -     */ -    protected int getPersistedInt(int defaultReturnValue) { -        if (!shouldPersist()) { -            return defaultReturnValue; -        } -         -        return mPreferenceManager.getSharedPreferences().getInt(mKey, defaultReturnValue); -    } -     -    /** -     * Attempts to persist a float to the {@link android.content.SharedPreferences}. -     *  -     * @param value The value to persist. -     * @return True if this Preference is persistent. (This is not whether the -     *         value was persisted, since we may not necessarily commit if there -     *         will be a batch commit later.) -     * @see #persistString(String) -     * @see #getPersistedFloat(float) -     */ -    protected boolean persistFloat(float value) { -        if (shouldPersist()) { -            if (value == getPersistedFloat(Float.NaN)) { -                // It's already there, so the same as persisting -                return true; -            } - -            SharedPreferences.Editor editor = mPreferenceManager.getEditor(); -            editor.putFloat(mKey, value); -            tryCommit(editor); -            return true; -        } -        return false; -    } -     -    /** -     * Attempts to get a persisted float from the {@link android.content.SharedPreferences}. -     *  -     * @param defaultReturnValue The default value to return if either this -     *            Preference is not persistent or this Preference is not in the -     *            SharedPreferences. -     * @return The value from the SharedPreferences or the default return -     *         value. -     * @see #getPersistedString(String) -     * @see #persistFloat(float) -     */ -    protected float getPersistedFloat(float defaultReturnValue) { -        if (!shouldPersist()) { -            return defaultReturnValue; -        } -         -        return mPreferenceManager.getSharedPreferences().getFloat(mKey, defaultReturnValue); -    } -     -    /** -     * Attempts to persist a long to the {@link android.content.SharedPreferences}. -     *  -     * @param value The value to persist. -     * @return True if this Preference is persistent. (This is not whether the -     *         value was persisted, since we may not necessarily commit if there -     *         will be a batch commit later.) -     * @see #persistString(String) -     * @see #getPersistedLong(long) -     */ -    protected boolean persistLong(long value) { -        if (shouldPersist()) { -            if (value == getPersistedLong(~value)) { -                // It's already there, so the same as persisting -                return true; -            } -             -            SharedPreferences.Editor editor = mPreferenceManager.getEditor(); -            editor.putLong(mKey, value); -            tryCommit(editor); -            return true; -        } -        return false; -    } -     -    /** -     * Attempts to get a persisted long from the {@link android.content.SharedPreferences}. -     *  -     * @param defaultReturnValue The default value to return if either this -     *            Preference is not persistent or this Preference is not in the -     *            SharedPreferences. -     * @return The value from the SharedPreferences or the default return -     *         value. -     * @see #getPersistedString(String) -     * @see #persistLong(long) -     */ -    protected long getPersistedLong(long defaultReturnValue) { -        if (!shouldPersist()) { -            return defaultReturnValue; -        } -         -        return mPreferenceManager.getSharedPreferences().getLong(mKey, defaultReturnValue); -    } -     -    /** -     * Attempts to persist a boolean to the {@link android.content.SharedPreferences}. -     *  -     * @param value The value to persist. -     * @return True if this Preference is persistent. (This is not whether the -     *         value was persisted, since we may not necessarily commit if there -     *         will be a batch commit later.) -     * @see #persistString(String) -     * @see #getPersistedBoolean(boolean) -     */ -    protected boolean persistBoolean(boolean value) { -        if (shouldPersist()) { -            if (value == getPersistedBoolean(!value)) { -                // It's already there, so the same as persisting -                return true; -            } -             -            SharedPreferences.Editor editor = mPreferenceManager.getEditor(); -            editor.putBoolean(mKey, value); -            tryCommit(editor); -            return true; -        } -        return false; -    } -     -    /** -     * Attempts to get a persisted boolean from the {@link android.content.SharedPreferences}. -     *  -     * @param defaultReturnValue The default value to return if either this -     *            Preference is not persistent or this Preference is not in the -     *            SharedPreferences. -     * @return The value from the SharedPreferences or the default return -     *         value. -     * @see #getPersistedString(String) -     * @see #persistBoolean(boolean) -     */ -    protected boolean getPersistedBoolean(boolean defaultReturnValue) { -        if (!shouldPersist()) { -            return defaultReturnValue; -        } -         -        return mPreferenceManager.getSharedPreferences().getBoolean(mKey, defaultReturnValue); -    } -     -    boolean hasSpecifiedLayout() { -        return mHasSpecifiedLayout; -    } -     -    @Override -    public String toString() { -        return getFilterableStringBuilder().toString(); -    } -         -    /** -     * Returns the text that will be used to filter this Preference depending on -     * user input. -     * <p> -     * If overridding and calling through to the superclass, make sure to prepend -     * your additions with a space. -     *  -     * @return Text as a {@link StringBuilder} that will be used to filter this -     *         preference. By default, this is the title and summary -     *         (concatenated with a space). -     */ -    StringBuilder getFilterableStringBuilder() { -        StringBuilder sb = new StringBuilder(); -        CharSequence title = getTitle(); -        if (!TextUtils.isEmpty(title)) { -            sb.append(title).append(' '); -        } -        CharSequence summary = getSummary(); -        if (!TextUtils.isEmpty(summary)) { -            sb.append(summary).append(' '); -        } -        // Drop the last space -        sb.setLength(sb.length() - 1); -        return sb; -    } - -    /** -     * Store this Preference hierarchy's frozen state into the given container. -     *  -     * @param container The Bundle in which to save the instance of this Preference. -     *  -     * @see #restoreHierarchyState -     * @see #onSaveInstanceState -     */ -    public void saveHierarchyState(Bundle container) { -        dispatchSaveInstanceState(container); -    } - -    /** -     * Called by {@link #saveHierarchyState} to store the instance for this Preference and its children. -     * May be overridden to modify how the save happens for children. For example, some -     * Preference objects may want to not store an instance for their children. -     *  -     * @param container The Bundle in which to save the instance of this Preference. -     *  -     * @see #saveHierarchyState -     * @see #onSaveInstanceState -     */ -    void dispatchSaveInstanceState(Bundle container) { -        if (hasKey()) { -            mBaseMethodCalled = false; -            Parcelable state = onSaveInstanceState(); -            if (!mBaseMethodCalled) { -                throw new IllegalStateException( -                        "Derived class did not call super.onSaveInstanceState()"); -            } -            if (state != null) { -                container.putParcelable(mKey, state); -            } -        } -    } - -    /** -     * Hook allowing a Preference to generate a representation of its internal -     * state that can later be used to create a new instance with that same -     * state. This state should only contain information that is not persistent -     * or can be reconstructed later. -     *  -     * @return A Parcelable object containing the current dynamic state of -     *         this Preference, or null if there is nothing interesting to save. -     *         The default implementation returns null. -     * @see #onRestoreInstanceState -     * @see #saveHierarchyState -     */ -    protected Parcelable onSaveInstanceState() { -        mBaseMethodCalled = true; -        return BaseSavedState.EMPTY_STATE; -    } - -    /** -     * Restore this Preference hierarchy's previously saved state from the given container. -     *  -     * @param container The Bundle that holds the previously saved state. -     *  -     * @see #saveHierarchyState -     * @see #onRestoreInstanceState -     */ -    public void restoreHierarchyState(Bundle container) { -        dispatchRestoreInstanceState(container); -    } - -    /** -     * Called by {@link #restoreHierarchyState} to retrieve the saved state for this -     * Preference and its children. May be overridden to modify how restoring -     * happens to the children of a Preference. For example, some Preference objects may -     * not want to save state for their children. -     *  -     * @param container The Bundle that holds the previously saved state. -     * @see #restoreHierarchyState -     * @see #onRestoreInstanceState -     */ -    void dispatchRestoreInstanceState(Bundle container) { -        if (hasKey()) { -            Parcelable state = container.getParcelable(mKey); -            if (state != null) { -                mBaseMethodCalled = false; -                onRestoreInstanceState(state); -                if (!mBaseMethodCalled) { -                    throw new IllegalStateException( -                            "Derived class did not call super.onRestoreInstanceState()"); -                } -            } -        } -    } - -    /** -     * Hook allowing a Preference to re-apply a representation of its internal -     * state that had previously been generated by {@link #onSaveInstanceState}. -     * This function will never be called with a null state. -     *  -     * @param state The saved state that had previously been returned by -     *            {@link #onSaveInstanceState}. -     * @see #onSaveInstanceState -     * @see #restoreHierarchyState -     */ -    protected void onRestoreInstanceState(Parcelable state) { -        mBaseMethodCalled = true; -        if (state != BaseSavedState.EMPTY_STATE && state != null) { -            throw new IllegalArgumentException("Wrong state class -- expecting Preference State"); -        } -    } - -    /** -     * A base class for managing the instance state of a {@link Preference}. -     */ -    public static class BaseSavedState extends AbsSavedState { -        public BaseSavedState(Parcel source) { -            super(source); -        } - -        public BaseSavedState(Parcelable superState) { -            super(superState); -        } -         -        public static final Parcelable.Creator<BaseSavedState> CREATOR = -                new Parcelable.Creator<BaseSavedState>() { -            public BaseSavedState createFromParcel(Parcel in) { -                return new BaseSavedState(in); -            } - -            public BaseSavedState[] newArray(int size) { -                return new BaseSavedState[size]; -            } -        }; -    } - -} diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java deleted file mode 100644 index 837ce91..0000000 --- a/core/java/android/preference/PreferenceActivity.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import android.app.Activity; -import android.app.ListActivity; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.view.View; -import android.view.Window; - -/** - * Shows a hierarchy of {@link Preference} objects as - * lists, possibly spanning multiple screens. These preferences will - * automatically save to {@link SharedPreferences} as the user interacts with - * them. To retrieve an instance of {@link SharedPreferences} that the - * preference hierarchy in this activity will use, call - * {@link PreferenceManager#getDefaultSharedPreferences(android.content.Context)} - * with a context in the same package as this activity. - * <p> - * Furthermore, the preferences shown will follow the visual style of system - * preferences. It is easy to create a hierarchy of preferences (that can be - * shown on multiple screens) via XML. For these reasons, it is recommended to - * use this activity (as a superclass) to deal with preferences in applications. - * <p> - * A {@link PreferenceScreen} object should be at the top of the preference - * hierarchy. Furthermore, subsequent {@link PreferenceScreen} in the hierarchy - * denote a screen break--that is the preferences contained within subsequent - * {@link PreferenceScreen} should be shown on another screen. The preference - * framework handles showing these other screens from the preference hierarchy. - * <p> - * The preference hierarchy can be formed in multiple ways: - * <li> From an XML file specifying the hierarchy - * <li> From different {@link Activity Activities} that each specify its own - * preferences in an XML file via {@link Activity} meta-data - * <li> From an object hierarchy rooted with {@link PreferenceScreen} - * <p> - * To inflate from XML, use the {@link #addPreferencesFromResource(int)}. The - * root element should be a {@link PreferenceScreen}. Subsequent elements can point - * to actual {@link Preference} subclasses. As mentioned above, subsequent - * {@link PreferenceScreen} in the hierarchy will result in the screen break. - * <p> - * To specify an {@link Intent} to query {@link Activity Activities} that each - * have preferences, use {@link #addPreferencesFromIntent}. Each - * {@link Activity} can specify meta-data in the manifest (via the key - * {@link PreferenceManager#METADATA_KEY_PREFERENCES}) that points to an XML - * resource. These XML resources will be inflated into a single preference - * hierarchy and shown by this activity. - * <p> - * To specify an object hierarchy rooted with {@link PreferenceScreen}, use - * {@link #setPreferenceScreen(PreferenceScreen)}. - * <p> - * As a convenience, this activity implements a click listener for any - * preference in the current hierarchy, see - * {@link #onPreferenceTreeClick(PreferenceScreen, Preference)}. - *  - * @see Preference - * @see PreferenceScreen - */ -public abstract class PreferenceActivity extends ListActivity implements -        PreferenceManager.OnPreferenceTreeClickListener { -     -    private static final String PREFERENCES_TAG = "android:preferences"; -     -    private PreferenceManager mPreferenceManager; -     -    /** -     * The starting request code given out to preference framework. -     */ -    private static final int FIRST_REQUEST_CODE = 100; -     -    private static final int MSG_BIND_PREFERENCES = 0; -    private Handler mHandler = new Handler() { -        @Override -        public void handleMessage(Message msg) { -            switch (msg.what) { -                 -                case MSG_BIND_PREFERENCES: -                    bindPreferences(); -                    break; -            } -        } -    }; - -    @Override -    protected void onCreate(Bundle savedInstanceState) { -        super.onCreate(savedInstanceState); - -        setContentView(com.android.internal.R.layout.preference_list_content); -         -        mPreferenceManager = onCreatePreferenceManager(); -        getListView().setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); -    } - -    @Override -    protected void onStop() { -        super.onStop(); -         -        mPreferenceManager.dispatchActivityStop(); -    } - -    @Override -    protected void onDestroy() { -        super.onDestroy(); -         -        mPreferenceManager.dispatchActivityDestroy(); -    } - -    @Override -    protected void onSaveInstanceState(Bundle outState) { -        super.onSaveInstanceState(outState); - -        final PreferenceScreen preferenceScreen = getPreferenceScreen(); -        if (preferenceScreen != null) { -            Bundle container = new Bundle(); -            preferenceScreen.saveHierarchyState(container); -            outState.putBundle(PREFERENCES_TAG, container); -        } -    } - -    @Override -    protected void onRestoreInstanceState(Bundle state) { -        super.onRestoreInstanceState(state); - -        Bundle container = state.getBundle(PREFERENCES_TAG); -        if (container != null) { -            final PreferenceScreen preferenceScreen = getPreferenceScreen(); -            if (preferenceScreen != null) { -                preferenceScreen.restoreHierarchyState(container); -            } -        } -    } - -    @Override -    protected void onActivityResult(int requestCode, int resultCode, Intent data) { -        super.onActivityResult(requestCode, resultCode, data); -         -        mPreferenceManager.dispatchActivityResult(requestCode, resultCode, data); -    } - -    @Override -    public void onContentChanged() { -        super.onContentChanged(); -        postBindPreferences(); -    } - -    /** -     * Posts a message to bind the preferences to the list view. -     * <p> -     * Binding late is preferred as any custom preference types created in -     * {@link #onCreate(Bundle)} are able to have their views recycled. -     */ -    private void postBindPreferences() { -        if (mHandler.hasMessages(MSG_BIND_PREFERENCES)) return; -        mHandler.obtainMessage(MSG_BIND_PREFERENCES).sendToTarget(); -    } -     -    private void bindPreferences() { -        final PreferenceScreen preferenceScreen = getPreferenceScreen(); -        if (preferenceScreen != null) { -            preferenceScreen.bind(getListView()); -        } -    } -     -    /** -     * Creates the {@link PreferenceManager}. -     *  -     * @return The {@link PreferenceManager} used by this activity. -     */ -    private PreferenceManager onCreatePreferenceManager() { -        PreferenceManager preferenceManager = new PreferenceManager(this, FIRST_REQUEST_CODE); -        preferenceManager.setOnPreferenceTreeClickListener(this); -        return preferenceManager; -    } -     -    /** -     * Returns the {@link PreferenceManager} used by this activity. -     * @return The {@link PreferenceManager}. -     */ -    public PreferenceManager getPreferenceManager() { -        return mPreferenceManager; -    } -     -    private void requirePreferenceManager() { -        if (mPreferenceManager == null) { -            throw new RuntimeException("This should be called after super.onCreate."); -        } -    } - -    /** -     * Sets the root of the preference hierarchy that this activity is showing. -     *  -     * @param preferenceScreen The root {@link PreferenceScreen} of the preference hierarchy. -     */ -    public void setPreferenceScreen(PreferenceScreen preferenceScreen) { -        if (mPreferenceManager.setPreferences(preferenceScreen) && preferenceScreen != null) { -            postBindPreferences(); -            CharSequence title = getPreferenceScreen().getTitle(); -            // Set the title of the activity -            if (title != null) { -                setTitle(title); -            } -        } -    } -     -    /** -     * Gets the root of the preference hierarchy that this activity is showing. -     *  -     * @return The {@link PreferenceScreen} that is the root of the preference -     *         hierarchy. -     */ -    public PreferenceScreen getPreferenceScreen() { -        return mPreferenceManager.getPreferenceScreen(); -    } -     -    /** -     * Adds preferences from activities that match the given {@link Intent}. -     *  -     * @param intent The {@link Intent} to query activities. -     */ -    public void addPreferencesFromIntent(Intent intent) { -        requirePreferenceManager(); -         -        setPreferenceScreen(mPreferenceManager.inflateFromIntent(intent, getPreferenceScreen())); -    } -     -    /** -     * Inflates the given XML resource and adds the preference hierarchy to the current -     * preference hierarchy. -     *  -     * @param preferencesResId The XML resource ID to inflate. -     */ -    public void addPreferencesFromResource(int preferencesResId) { -        requirePreferenceManager(); -         -        setPreferenceScreen(mPreferenceManager.inflateFromResource(this, preferencesResId, -                getPreferenceScreen())); -    } - -    /** -     * {@inheritDoc} -     */ -    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { -        return false; -    } -     -    /** -     * Finds a {@link Preference} based on its key. -     *  -     * @param key The key of the preference to retrieve. -     * @return The {@link Preference} with the key, or null. -     * @see PreferenceGroup#findPreference(CharSequence) -     */ -    public Preference findPreference(CharSequence key) { -         -        if (mPreferenceManager == null) { -            return null; -        } -         -        return mPreferenceManager.findPreference(key); -    } - -    @Override -    protected void onNewIntent(Intent intent) { -        if (mPreferenceManager != null) { -            mPreferenceManager.dispatchNewIntent(intent); -        } -    } -     -} diff --git a/core/java/android/preference/PreferenceCategory.java b/core/java/android/preference/PreferenceCategory.java deleted file mode 100644 index 237c5ce..0000000 --- a/core/java/android/preference/PreferenceCategory.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import java.util.Map; - -import android.content.Context; -import android.util.AttributeSet; - -/** - * Used to group {@link Preference} objects - * and provide a disabled title above the group. - */ -public class PreferenceCategory extends PreferenceGroup { -    private static final String TAG = "PreferenceCategory"; -     -    public PreferenceCategory(Context context, AttributeSet attrs, int defStyle) { -        super(context, attrs, defStyle); -    } - -    public PreferenceCategory(Context context, AttributeSet attrs) { -        this(context, attrs, com.android.internal.R.attr.preferenceCategoryStyle); -    } - -    public PreferenceCategory(Context context) { -        this(context, null); -    } -     -    @Override -    protected boolean onPrepareAddPreference(Preference preference) { -        if (preference instanceof PreferenceCategory) { -            throw new IllegalArgumentException( -                    "Cannot add a " + TAG + " directly to a " + TAG); -        } -         -        return super.onPrepareAddPreference(preference); -    } - -    @Override -    public boolean isEnabled() { -        return false; -    } -     -} diff --git a/core/java/android/preference/PreferenceGroup.java b/core/java/android/preference/PreferenceGroup.java deleted file mode 100644 index d008fd6..0000000 --- a/core/java/android/preference/PreferenceGroup.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import android.content.Context; -import android.content.res.TypedArray; -import android.os.Bundle; -import android.os.Parcelable; -import android.text.TextUtils; -import android.util.AttributeSet; - -/** - * A container for multiple - * {@link Preference} objects. It is a base class for  Preference objects that are - * parents, such as {@link PreferenceCategory} and {@link PreferenceScreen}. - *  - * @attr ref android.R.styleable#PreferenceGroup_orderingFromXml - */ -public abstract class PreferenceGroup extends Preference implements GenericInflater.Parent<Preference> { -    /** -     * The container for child {@link Preference}s. This is sorted based on the -     * ordering, please use {@link #addPreference(Preference)} instead of adding -     * to this directly. -     */ -    private List<Preference> mPreferenceList; - -    private boolean mOrderingAsAdded = true; - -    private int mCurrentPreferenceOrder = 0; - -    private boolean mAttachedToActivity = false; -     -    public PreferenceGroup(Context context, AttributeSet attrs, int defStyle) { -        super(context, attrs, defStyle); - -        mPreferenceList = new ArrayList<Preference>(); - -        TypedArray a = context.obtainStyledAttributes(attrs, -                com.android.internal.R.styleable.PreferenceGroup, defStyle, 0); -        mOrderingAsAdded = a.getBoolean(com.android.internal.R.styleable.PreferenceGroup_orderingFromXml, -                mOrderingAsAdded); -        a.recycle(); -    } - -    public PreferenceGroup(Context context, AttributeSet attrs) { -        this(context, attrs, 0); -    } - -    /** -     * Whether to order the {@link Preference} children of this group as they -     * are added. If this is false, the ordering will follow each Preference -     * order and default to alphabetic for those without an order. -     * <p> -     * If this is called after preferences are added, they will not be -     * re-ordered in the order they were added, hence call this method early on. -     *  -     * @param orderingAsAdded Whether to order according to the order added. -     * @see Preference#setOrder(int) -     */ -    public void setOrderingAsAdded(boolean orderingAsAdded) { -        mOrderingAsAdded = orderingAsAdded; -    } - -    /** -     * Whether this group is ordering preferences in the order they are added. -     *  -     * @return Whether this group orders based on the order the children are added. -     * @see #setOrderingAsAdded(boolean) -     */ -    public boolean isOrderingAsAdded() { -        return mOrderingAsAdded; -    } - -    /** -     * Called by the inflater to add an item to this group. -     */ -    public void addItemFromInflater(Preference preference) { -        addPreference(preference); -    } - -    /** -     * Returns the number of children {@link Preference}s. -     * @return The number of preference children in this group. -     */ -    public int getPreferenceCount() { -        return mPreferenceList.size(); -    } - -    /** -     * Returns the {@link Preference} at a particular index. -     *  -     * @param index The index of the {@link Preference} to retrieve. -     * @return The {@link Preference}. -     */ -    public Preference getPreference(int index) { -        return mPreferenceList.get(index); -    } - -    /** -     * Adds a {@link Preference} at the correct position based on the -     * preference's order. -     *  -     * @param preference The preference to add. -     * @return Whether the preference is now in this group. -     */ -    public boolean addPreference(Preference preference) { -        if (mPreferenceList.contains(preference)) { -            // Exists -            return true; -        } -         -        if (preference.getOrder() == Preference.DEFAULT_ORDER) { -            if (mOrderingAsAdded) { -                preference.setOrder(mCurrentPreferenceOrder++); -            } - -            if (preference instanceof PreferenceGroup) { -                // TODO: fix (method is called tail recursively when inflating, -                // so we won't end up properly passing this flag down to children -                ((PreferenceGroup)preference).setOrderingAsAdded(mOrderingAsAdded); -            } -        } - -        int insertionIndex = Collections.binarySearch(mPreferenceList, preference); -        if (insertionIndex < 0) { -            insertionIndex = insertionIndex * -1 - 1; -        } - -        if (!onPrepareAddPreference(preference)) { -            return false; -        } - -        synchronized(this) { -            mPreferenceList.add(insertionIndex, preference); -        } - -        preference.onAttachedToHierarchy(getPreferenceManager()); -         -        if (mAttachedToActivity) { -            preference.onAttachedToActivity(); -        } -         -        notifyHierarchyChanged(); - -        return true; -    } - -    /** -     * Removes a {@link Preference} from this group. -     *  -     * @param preference The preference to remove. -     * @return Whether the preference was found and removed. -     */ -    public boolean removePreference(Preference preference) { -        final boolean returnValue = removePreferenceInt(preference); -        notifyHierarchyChanged(); -        return returnValue; -    } - -    private boolean removePreferenceInt(Preference preference) { -        synchronized(this) { -            preference.onPrepareForRemoval(); -            return mPreferenceList.remove(preference); -        } -    } -     -    /** -     * Removes all {@link Preference Preferences} from this group. -     */ -    public void removeAll() { -        synchronized(this) { -            List<Preference> preferenceList = mPreferenceList; -            for (int i = preferenceList.size() - 1; i >= 0; i--) { -                removePreferenceInt(preferenceList.get(0)); -            } -        } -        notifyHierarchyChanged(); -    } -     -    /** -     * Prepares a {@link Preference} to be added to the group. -     *  -     * @param preference The preference to add. -     * @return Whether to allow adding the preference (true), or not (false). -     */ -    protected boolean onPrepareAddPreference(Preference preference) { -        if (!super.isEnabled()) { -            preference.setEnabled(false); -        } -         -        return true; -    } - -    /** -     * Finds a {@link Preference} based on its key. If two {@link Preference} -     * share the same key (not recommended), the first to appear will be -     * returned (to retrieve the other preference with the same key, call this -     * method on the first preference). If this preference has the key, it will -     * not be returned. -     * <p> -     * This will recursively search for the preference into children that are -     * also {@link PreferenceGroup PreferenceGroups}. -     *  -     * @param key The key of the preference to retrieve. -     * @return The {@link Preference} with the key, or null. -     */ -    public Preference findPreference(CharSequence key) { -        if (TextUtils.equals(getKey(), key)) { -            return this; -        } -        final int preferenceCount = getPreferenceCount(); -        for (int i = 0; i < preferenceCount; i++) { -            final Preference preference = getPreference(i); -            final String curKey = preference.getKey(); - -            if (curKey != null && curKey.equals(key)) { -                return preference; -            } -             -            if (preference instanceof PreferenceGroup) { -                final Preference returnedPreference = ((PreferenceGroup)preference) -                        .findPreference(key); -                if (returnedPreference != null) { -                    return returnedPreference; -                } -            } -        } - -        return null; -    } - -    /** -     * Whether this preference group should be shown on the same screen as its -     * contained preferences. -     *  -     * @return True if the contained preferences should be shown on the same -     *         screen as this preference. -     */ -    protected boolean isOnSameScreenAsChildren() { -        return true; -    } -     -    @Override -    protected void onAttachedToActivity() { -        super.onAttachedToActivity(); - -        // Mark as attached so if a preference is later added to this group, we -        // can tell it we are already attached -        mAttachedToActivity = true; -         -        // Dispatch to all contained preferences -        final int preferenceCount = getPreferenceCount(); -        for (int i = 0; i < preferenceCount; i++) { -            getPreference(i).onAttachedToActivity(); -        } -    } - -    @Override -    protected void onPrepareForRemoval() { -        super.onPrepareForRemoval(); -         -        // We won't be attached to the activity anymore -        mAttachedToActivity = false; -    } - -    @Override -    public void setEnabled(boolean enabled) { -        super.setEnabled(enabled); -         -        // Dispatch to all contained preferences -        final int preferenceCount = getPreferenceCount(); -        for (int i = 0; i < preferenceCount; i++) { -            getPreference(i).setEnabled(enabled); -        } -    } -     -    void sortPreferences() { -        synchronized (this) { -            Collections.sort(mPreferenceList); -        } -    } - -    @Override -    protected void dispatchSaveInstanceState(Bundle container) { -        super.dispatchSaveInstanceState(container); - -        // Dispatch to all contained preferences -        final int preferenceCount = getPreferenceCount(); -        for (int i = 0; i < preferenceCount; i++) { -            getPreference(i).dispatchSaveInstanceState(container); -        } -    } -     -    @Override -    protected void dispatchRestoreInstanceState(Bundle container) { -        super.dispatchRestoreInstanceState(container); - -        // Dispatch to all contained preferences -        final int preferenceCount = getPreferenceCount(); -        for (int i = 0; i < preferenceCount; i++) { -            getPreference(i).dispatchRestoreInstanceState(container); -        } -    } - -} diff --git a/core/java/android/preference/PreferenceGroupAdapter.java b/core/java/android/preference/PreferenceGroupAdapter.java deleted file mode 100644 index 14c0054..0000000 --- a/core/java/android/preference/PreferenceGroupAdapter.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import android.os.Handler; -import android.preference.Preference.OnPreferenceChangeInternalListener; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Adapter; -import android.widget.BaseAdapter; -import android.widget.ListView; - -/** - * An adapter that returns the {@link Preference} contained in this group. - * In most cases, this adapter should be the base class for any custom - * adapters from {@link Preference#getAdapter()}. - * <p> - * This adapter obeys the - * {@link Preference}'s adapter rule (the - * {@link Adapter#getView(int, View, ViewGroup)} should be used instead of - * {@link Preference#getView(ViewGroup)} if a {@link Preference} has an - * adapter via {@link Preference#getAdapter()}). - * <p> - * This adapter also propagates data change/invalidated notifications upward. - * <p> - * This adapter does not include this {@link PreferenceGroup} in the returned - * adapter, use {@link PreferenceCategoryAdapter} instead. - *  - * @see PreferenceCategoryAdapter - */ -class PreferenceGroupAdapter extends BaseAdapter implements OnPreferenceChangeInternalListener { -     -    private static final String TAG = "PreferenceGroupAdapter"; - -    /** -     * The group that we are providing data from. -     */ -    private PreferenceGroup mPreferenceGroup; -     -    /** -     * Maps a position into this adapter -> {@link Preference}. These -     * {@link Preference}s don't have to be direct children of this -     * {@link PreferenceGroup}, they can be grand children or younger) -     */ -    private List<Preference> mPreferenceList; -     -    /** -     * List of unique Preference and its subclasses' names. This is used to find -     * out how many types of views this adapter can return. Once the count is -     * returned, this cannot be modified (since the ListView only checks the -     * count once--when the adapter is being set). We will not recycle views for -     * Preference subclasses seen after the count has been returned. -     */ -    private List<String> mPreferenceClassNames; - -    /** -     * Blocks the mPreferenceClassNames from being changed anymore. -     */ -    private boolean mHasReturnedViewTypeCount = false; -     -    private volatile boolean mIsSyncing = false; -     -    private Handler mHandler = new Handler();  -     -    private Runnable mSyncRunnable = new Runnable() { -        public void run() { -            syncMyPreferences(); -        } -    }; - -    public PreferenceGroupAdapter(PreferenceGroup preferenceGroup) { -        mPreferenceGroup = preferenceGroup; -        // If this group gets or loses any children, let us know -        mPreferenceGroup.setOnPreferenceChangeInternalListener(this); -         -        mPreferenceList = new ArrayList<Preference>(); -        mPreferenceClassNames = new ArrayList<String>(); -         -        syncMyPreferences(); -    } - -    private void syncMyPreferences() { -        synchronized(this) { -            if (mIsSyncing) { -                return; -            } -         -            mIsSyncing = true; -        } - -        List<Preference> newPreferenceList = new ArrayList<Preference>(mPreferenceList.size()); -        flattenPreferenceGroup(newPreferenceList, mPreferenceGroup); -        mPreferenceList = newPreferenceList; -         -        notifyDataSetChanged(); - -        synchronized(this) { -            mIsSyncing = false; -            notifyAll(); -        } -    } -     -    private void flattenPreferenceGroup(List<Preference> preferences, PreferenceGroup group) { -        // TODO: shouldn't always? -        group.sortPreferences(); - -        final int groupSize = group.getPreferenceCount(); -        for (int i = 0; i < groupSize; i++) { -            final Preference preference = group.getPreference(i); -             -            preferences.add(preference); -             -            if (!mHasReturnedViewTypeCount) { -                addPreferenceClassName(preference); -            } -             -            if (preference instanceof PreferenceGroup) { -                final PreferenceGroup preferenceAsGroup = (PreferenceGroup) preference; -                if (preferenceAsGroup.isOnSameScreenAsChildren()) { -                    flattenPreferenceGroup(preferences, preferenceAsGroup); -                } -            } - -            preference.setOnPreferenceChangeInternalListener(this); -        } -    } - -    private void addPreferenceClassName(Preference preference) { -        final String name = preference.getClass().getName(); -        int insertPos = Collections.binarySearch(mPreferenceClassNames, name); -         -        // Only insert if it doesn't exist (when it is negative). -        if (insertPos < 0) { -            // Convert to insert index -            insertPos = insertPos * -1 - 1; -            mPreferenceClassNames.add(insertPos, name); -        } -    } -     -    public int getCount() { -        return mPreferenceList.size(); -    } - -    public Preference getItem(int position) { -        if (position < 0 || position >= getCount()) return null; -        return mPreferenceList.get(position); -    } - -    public long getItemId(int position) { -        if (position < 0 || position >= getCount()) return ListView.INVALID_ROW_ID; -        return this.getItem(position).getId(); -    } - -    public View getView(int position, View convertView, ViewGroup parent) { -        final Preference preference = this.getItem(position); -         -        if (preference.hasSpecifiedLayout()) { -            // If the preference had specified a layout (as opposed to the -            // default), don't use convert views. -            convertView = null; -        } else { -            // TODO: better way of doing this -            final String name = preference.getClass().getName(); -            if (Collections.binarySearch(mPreferenceClassNames, name) < 0) { -                convertView = null; -            } -        } -         -        return preference.getView(convertView, parent); -    } - -    @Override -    public boolean isEnabled(int position) { -        if (position < 0 || position >= getCount()) return true; -        return this.getItem(position).isSelectable(); -    } - -    @Override -    public boolean areAllItemsEnabled() { -        // There should always be a preference group, and these groups are always -        // disabled -        return false; -    } - -    public void onPreferenceChange(Preference preference) { -        notifyDataSetChanged(); -    } - -    public void onPreferenceHierarchyChange(Preference preference) { -        mHandler.removeCallbacks(mSyncRunnable); -        mHandler.post(mSyncRunnable); -    } - -    @Override -    public boolean hasStableIds() { -        return true; -    } - -    @Override -    public int getItemViewType(int position) { -        if (!mHasReturnedViewTypeCount) { -            mHasReturnedViewTypeCount = true; -        } -         -        final Preference preference = this.getItem(position); -        if (preference.hasSpecifiedLayout()) { -            return IGNORE_ITEM_VIEW_TYPE; -        } - -        final String name = preference.getClass().getName(); -        int viewType = Collections.binarySearch(mPreferenceClassNames, name); -        if (viewType < 0) { -            // This is a class that was seen after we returned the count, so -            // don't recycle it. -            return IGNORE_ITEM_VIEW_TYPE; -        } else { -            return viewType; -        } -    } - -    @Override -    public int getViewTypeCount() { -        if (!mHasReturnedViewTypeCount) { -            mHasReturnedViewTypeCount = true; -        } -         -        return Math.max(1, mPreferenceClassNames.size()); -    } - -} diff --git a/core/java/android/preference/PreferenceInflater.java b/core/java/android/preference/PreferenceInflater.java deleted file mode 100644 index 779e746..0000000 --- a/core/java/android/preference/PreferenceInflater.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import java.io.IOException; -import java.util.Map; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.app.AliasActivity; -import android.content.Context; -import android.content.Intent; -import android.util.AttributeSet; -import android.util.Log; - -/** - * The {@link PreferenceInflater} is used to inflate preference hierarchies from - * XML files. - * <p> - * Do not construct this directly, instead use - * {@link Context#getSystemService(String)} with - * {@link Context#PREFERENCE_INFLATER_SERVICE}. - */ -class PreferenceInflater extends GenericInflater<Preference, PreferenceGroup> { -    private static final String TAG = "PreferenceInflater"; -    private static final String INTENT_TAG_NAME = "intent"; - -    private PreferenceManager mPreferenceManager; -     -    public PreferenceInflater(Context context, PreferenceManager preferenceManager) { -        super(context); -        init(preferenceManager); -    } - -    PreferenceInflater(GenericInflater<Preference, PreferenceGroup> original, PreferenceManager preferenceManager, Context newContext) { -        super(original, newContext); -        init(preferenceManager); -    } - -    @Override -    public GenericInflater<Preference, PreferenceGroup> cloneInContext(Context newContext) { -        return new PreferenceInflater(this, mPreferenceManager, newContext); -    } -     -    private void init(PreferenceManager preferenceManager) { -        mPreferenceManager = preferenceManager; -        setDefaultPackage("android.preference."); -    } - -    @Override -    protected boolean onCreateCustomFromTag(XmlPullParser parser, Preference parentPreference, -            AttributeSet attrs) throws XmlPullParserException { -        final String tag = parser.getName(); -         -        if (tag.equals(INTENT_TAG_NAME)) { -            Intent intent = null; -             -            try { -                intent = Intent.parseIntent(getContext().getResources(), parser, attrs); -            } catch (IOException e) { -                Log.w(TAG, "Could not parse Intent."); -                Log.w(TAG, e); -            } -             -            if (intent != null) { -                parentPreference.setIntent(intent); -            } -             -            return true; -        } -         -        return false; -    } - -    @Override -    protected PreferenceGroup onMergeRoots(PreferenceGroup givenRoot, boolean attachToGivenRoot, -            PreferenceGroup xmlRoot) { -        // If we were given a Preferences, use it as the root (ignoring the root -        // Preferences from the XML file). -        if (givenRoot == null) { -            xmlRoot.onAttachedToHierarchy(mPreferenceManager); -            return xmlRoot; -        } else { -            return givenRoot; -        } -    } -     -} diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java deleted file mode 100644 index a7a3eef..0000000 --- a/core/java/android/preference/PreferenceManager.java +++ /dev/null @@ -1,799 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.XmlResourceParser; -import android.os.Bundle; -import android.util.Log; - -/** - * Used to help create {@link Preference} hierarchies - * from activities or XML. - * <p> - * In most cases, clients should use - * {@link PreferenceActivity#addPreferencesFromIntent} or - * {@link PreferenceActivity#addPreferencesFromResource(int)}. - *  - * @see PreferenceActivity - */ -public class PreferenceManager { -     -    private static final String TAG = "PreferenceManager"; - -    /** -     * The Activity meta-data key for its XML preference hierarchy. -     */ -    public static final String METADATA_KEY_PREFERENCES = "android.preference"; -     -    public static final String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values"; -     -    /** -     * @see #getActivity() -     */ -    private Activity mActivity; - -    /** -     * The context to use. This should always be set. -     *  -     * @see #mActivity -     */ -    private Context mContext; -     -    /** -     * The counter for unique IDs. -     */ -    private long mNextId = 0; - -    /** -     * The counter for unique request codes. -     */ -    private int mNextRequestCode; - -    /** -     * Cached shared preferences. -     */ -    private SharedPreferences mSharedPreferences; -     -    /** -     * If in no-commit mode, the shared editor to give out (which will be -     * committed when exiting no-commit mode). -     */ -    private SharedPreferences.Editor mEditor; -     -    /** -     * Blocks commits from happening on the shared editor. This is used when -     * inflating the hierarchy. Do not set this directly, use {@link #setNoCommit(boolean)} -     */ -    private boolean mNoCommit; -     -    /** -     * The SharedPreferences name that will be used for all {@link Preference}s -     * managed by this instance. -     */ -    private String mSharedPreferencesName; -     -    /** -     * The SharedPreferences mode that will be used for all {@link Preference}s -     * managed by this instance. -     */ -    private int mSharedPreferencesMode; -     -    /** -     * The {@link PreferenceScreen} at the root of the preference hierarchy. -     */ -    private PreferenceScreen mPreferenceScreen; - -    /** -     * List of activity result listeners. -     */ -    private List<OnActivityResultListener> mActivityResultListeners; - -    /** -     * List of activity stop listeners. -     */ -    private List<OnActivityStopListener> mActivityStopListeners; - -    /** -     * List of activity destroy listeners. -     */ -    private List<OnActivityDestroyListener> mActivityDestroyListeners; - -    /** -     * List of dialogs that should be dismissed when we receive onNewIntent in -     * our PreferenceActivity. -     */ -    private List<DialogInterface> mPreferencesScreens; -     -    private OnPreferenceTreeClickListener mOnPreferenceTreeClickListener; -     -    PreferenceManager(Activity activity, int firstRequestCode) { -        mActivity = activity; -        mNextRequestCode = firstRequestCode; -         -        init(activity); -    } - -    /** -     * This constructor should ONLY be used when getting default values from -     * an XML preference hierarchy. -     * <p> -     * The {@link PreferenceManager#PreferenceManager(Activity)} -     * should be used ANY time a preference will be displayed, since some preference -     * types need an Activity for managed queries. -     */ -    private PreferenceManager(Context context) { -        init(context); -    } - -    private void init(Context context) { -        mContext = context; -         -        setSharedPreferencesName(getDefaultSharedPreferencesName(context)); -    } -     -    /** -     * Returns a list of {@link Activity} (indirectly) that match a given -     * {@link Intent}. -     *  -     * @param queryIntent The Intent to match. -     * @return The list of {@link ResolveInfo} that point to the matched -     *         activities. -     */ -    private List<ResolveInfo> queryIntentActivities(Intent queryIntent) { -        return mContext.getPackageManager().queryIntentActivities(queryIntent, -                PackageManager.GET_META_DATA); -    } -     -    /** -     * Inflates a preference hierarchy from the preference hierarchies of -     * {@link Activity Activities} that match the given {@link Intent}. An -     * {@link Activity} defines its preference hierarchy with meta-data using -     * the {@link #METADATA_KEY_PREFERENCES} key. -     * <p> -     * If a preference hierarchy is given, the new preference hierarchies will -     * be merged in. -     *  -     * @param queryIntent The intent to match activities. -     * @param rootPreferences Optional existing hierarchy to merge the new -     *            hierarchies into. -     * @return The root hierarchy (if one was not provided, the new hierarchy's -     *         root). -     */ -    PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) { -        final List<ResolveInfo> activities = queryIntentActivities(queryIntent); -        final HashSet<String> inflatedRes = new HashSet<String>(); - -        for (int i = activities.size() - 1; i >= 0; i--) { -            final ActivityInfo activityInfo = activities.get(i).activityInfo; -            final Bundle metaData = activityInfo.metaData; - -            if ((metaData == null) || !metaData.containsKey(METADATA_KEY_PREFERENCES)) { -                continue; -            } - -            // Need to concat the package with res ID since the same res ID -            // can be re-used across contexts -            final String uniqueResId = activityInfo.packageName + ":" -                    + activityInfo.metaData.getInt(METADATA_KEY_PREFERENCES); -             -            if (!inflatedRes.contains(uniqueResId)) { -                inflatedRes.add(uniqueResId); - -                final Context context; -                try { -                    context = mContext.createPackageContext(activityInfo.packageName, 0); -                } catch (NameNotFoundException e) { -                    Log.w(TAG, "Could not create context for " + activityInfo.packageName + ": " -                        + Log.getStackTraceString(e)); -                    continue; -                } -                 -                final PreferenceInflater inflater = new PreferenceInflater(context, this); -                final XmlResourceParser parser = activityInfo.loadXmlMetaData(context -                        .getPackageManager(), METADATA_KEY_PREFERENCES); -                rootPreferences = (PreferenceScreen) inflater -                        .inflate(parser, rootPreferences, true); -                parser.close(); -            } -        } - -        rootPreferences.onAttachedToHierarchy(this); -         -        return rootPreferences; -    } - -    /** -     * Inflates a preference hierarchy from XML. If a preference hierarchy is -     * given, the new preference hierarchies will be merged in. -     *  -     * @param context The context of the resource. -     * @param resId The resource ID of the XML to inflate. -     * @param rootPreferences Optional existing hierarchy to merge the new -     *            hierarchies into. -     * @return The root hierarchy (if one was not provided, the new hierarchy's -     *         root). -     */ -    PreferenceScreen inflateFromResource(Context context, int resId, -            PreferenceScreen rootPreferences) { -        // Block commits -        setNoCommit(true); - -        final PreferenceInflater inflater = new PreferenceInflater(context, this); -        rootPreferences = (PreferenceScreen) inflater.inflate(resId, rootPreferences, true); -        rootPreferences.onAttachedToHierarchy(this); - -        // Unblock commits -        setNoCommit(false); - -        return rootPreferences; -    } -     -    public PreferenceScreen createPreferenceScreen(Context context) { -        final PreferenceScreen preferenceScreen = new PreferenceScreen(context, null); -        preferenceScreen.onAttachedToHierarchy(this); -        return preferenceScreen; -    } -     -    /** -     * Called by a preference to get a unique ID in its hierarchy. -     *  -     * @return A unique ID. -     */ -    long getNextId() { -        synchronized (this) { -            return mNextId++; -        } -    } -     -    /** -     * Returns the current name of the SharedPreferences file that preferences managed by -     * this will use. -     *  -     * @return The name that can be passed to {@link Context#getSharedPreferences(String, int)}. -     * @see Context#getSharedPreferences(String, int) -     */ -    public String getSharedPreferencesName() { -        return mSharedPreferencesName; -    } - -    /** -     * Sets the name of the SharedPreferences file that preferences managed by this -     * will use. -     *  -     * @param sharedPreferencesName The name of the SharedPreferences file. -     * @see Context#getSharedPreferences(String, int) -     */ -    public void setSharedPreferencesName(String sharedPreferencesName) { -        mSharedPreferencesName = sharedPreferencesName; -        mSharedPreferences = null; -    } - -    /** -     * Returns the current mode of the SharedPreferences file that preferences managed by -     * this will use. -     *  -     * @return The mode that can be passed to {@link Context#getSharedPreferences(String, int)}. -     * @see Context#getSharedPreferences(String, int) -     */ -    public int getSharedPreferencesMode() { -        return mSharedPreferencesMode; -    } - -    /** -     * Sets the mode of the SharedPreferences file that preferences managed by this -     * will use. -     *  -     * @param sharedPreferencesMode The mode of the SharedPreferences file. -     * @see Context#getSharedPreferences(String, int) -     */ -    public void setSharedPreferencesMode(int sharedPreferencesMode) { -        mSharedPreferencesMode = sharedPreferencesMode; -        mSharedPreferences = null; -    } - -    /** -     * Gets a SharedPreferences instance that preferences managed by this will -     * use. -     *  -     * @return A SharedPreferences instance pointing to the file that contains -     *         the values of preferences that are managed by this. -     */ -    public SharedPreferences getSharedPreferences() { -        if (mSharedPreferences == null) { -            mSharedPreferences = mContext.getSharedPreferences(mSharedPreferencesName, -                    mSharedPreferencesMode); -        } -         -        return mSharedPreferences; -    } -     -    /** -     * Gets a SharedPreferences instance that points to the default file that is -     * used by the preference framework in the given context. -     *  -     * @param context The context of the preferences whose values are wanted. -     * @return A SharedPreferences instance that can be used to retrieve and -     *         listen to values of the preferences. -     */ -    public static SharedPreferences getDefaultSharedPreferences(Context context) { -        return context.getSharedPreferences(getDefaultSharedPreferencesName(context), -                getDefaultSharedPreferencesMode()); -    } - -    private static String getDefaultSharedPreferencesName(Context context) { -        return context.getPackageName() + "_preferences"; -    } - -    private static int getDefaultSharedPreferencesMode() { -        return Context.MODE_PRIVATE; -    } - -    /** -     * Returns the root of the preference hierarchy managed by this class. -     *   -     * @return The {@link PreferenceScreen} object that is at the root of the hierarchy. -     */ -    PreferenceScreen getPreferenceScreen() { -        return mPreferenceScreen; -    } -     -    /** -     * Sets the root of the preference hierarchy. -     *  -     * @param preferenceScreen The root {@link PreferenceScreen} of the preference hierarchy. -     * @return Whether the {@link PreferenceScreen} given is different than the previous.  -     */ -    boolean setPreferences(PreferenceScreen preferenceScreen) { -        if (preferenceScreen != mPreferenceScreen) { -            mPreferenceScreen = preferenceScreen; -            return true; -        } -         -        return false; -    } -     -    /** -     * Finds a {@link Preference} based on its key. -     *  -     * @param key The key of the preference to retrieve. -     * @return The {@link Preference} with the key, or null. -     * @see PreferenceGroup#findPreference(CharSequence) -     */ -    public Preference findPreference(CharSequence key) { -        if (mPreferenceScreen == null) { -            return null; -        } -         -        return mPreferenceScreen.findPreference(key); -    } -     -    /** -     * Sets the default values from a preference hierarchy in XML. This should -     * be called by the application's main activity. -     * <p> -     * If {@code readAgain} is false, this will only set the default values if this -     * method has never been called in the past (or the -     * {@link #KEY_HAS_SET_DEFAULT_VALUES} in the default value shared -     * preferences file is false). To attempt to set the default values again -     * bypassing this check, set {@code readAgain} to true. -     *  -     * @param context The context of the shared preferences. -     * @param resId The resource ID of the preference hierarchy XML file. -     * @param readAgain Whether to re-read the default values. -     *            <p> -     *            Note: this will NOT reset preferences back to their default -     *            values. For that functionality, use -     *            {@link PreferenceManager#getDefaultSharedPreferences(Context)} -     *            and clear it followed by a call to this method with this -     *            parameter set to true. -     */ -    public static void setDefaultValues(Context context, int resId, boolean readAgain) { -         -        // Use the default shared preferences name and mode -        setDefaultValues(context, getDefaultSharedPreferencesName(context), -                getDefaultSharedPreferencesMode(), resId, readAgain); -    } -     -    /** -     * Similar to {@link #setDefaultValues(Context, int, boolean)} but allows -     * the client to provide the filename and mode of the shared preferences -     * file. -     *  -     * @see #setDefaultValues(Context, int, boolean) -     * @see #setSharedPreferencesName(String) -     * @see #setSharedPreferencesMode(int) -     */ -    public static void setDefaultValues(Context context, String sharedPreferencesName, -            int sharedPreferencesMode, int resId, boolean readAgain) { -        final SharedPreferences defaultValueSp = context.getSharedPreferences( -                KEY_HAS_SET_DEFAULT_VALUES, Context.MODE_PRIVATE); -         -        if (readAgain || !defaultValueSp.getBoolean(KEY_HAS_SET_DEFAULT_VALUES, false)) { -            final PreferenceManager pm = new PreferenceManager(context); -            pm.setSharedPreferencesName(sharedPreferencesName); -            pm.setSharedPreferencesMode(sharedPreferencesMode); -            pm.inflateFromResource(context, resId, null); - -            defaultValueSp.edit().putBoolean(KEY_HAS_SET_DEFAULT_VALUES, true).commit(); -        } -    } -     -    /** -     * Returns an editor to use when modifying the shared preferences. -     * <p> -     * Do NOT commit unless {@link #shouldCommit()} returns true. -     *  -     * @return An editor to use to write to shared preferences. -     * @see #shouldCommit() -     */ -    SharedPreferences.Editor getEditor() { -         -        if (mNoCommit) { -            if (mEditor == null) { -                mEditor = getSharedPreferences().edit(); -            } -             -            return mEditor; -        } else { -            return getSharedPreferences().edit(); -        } -    } -     -    /** -     * Whether it is the client's responsibility to commit on the -     * {@link #getEditor()}. This will return false in cases where the writes -     * should be batched, for example when inflating preferences from XML. -     *  -     * @return Whether the client should commit. -     */ -    boolean shouldCommit() { -        return !mNoCommit; -    } -     -    private void setNoCommit(boolean noCommit) { -        if (!noCommit && mEditor != null) { -            mEditor.commit(); -        } -         -        mNoCommit = noCommit; -    } -     -    /** -     * Returns the activity that shows the preferences. This is useful for doing -     * managed queries, but in most cases the use of {@link #getContext()} is -     * preferred. -     * <p> -     * This will return null if this class was instantiated with a Context -     * instead of Activity. For example, when setting the default values. -     *  -     * @return The activity that shows the preferences. -     * @see #mContext -     */ -    Activity getActivity() { -        return mActivity; -    } -     -    /** -     * Returns the context. This is preferred over {@link #getActivity()} when -     * possible. -     *  -     * @return The context. -     */ -    Context getContext() { -        return mContext; -    } - -    /** -     * Registers a listener. -     *  -     * @see OnActivityResultListener -     */ -    void registerOnActivityResultListener(OnActivityResultListener listener) { -        synchronized (this) { -            if (mActivityResultListeners == null) { -                mActivityResultListeners = new ArrayList<OnActivityResultListener>(); -            } -             -            if (!mActivityResultListeners.contains(listener)) { -                mActivityResultListeners.add(listener); -            } -        } -    } - -    /** -     * Unregisters a listener. -     *  -     * @see OnActivityResultListener -     */ -    void unregisterOnActivityResultListener(OnActivityResultListener listener) { -        synchronized (this) { -            if (mActivityResultListeners != null) { -                mActivityResultListeners.remove(listener); -            } -        } -    } - -    /** -     * Called by the {@link PreferenceManager} to dispatch a subactivity result. -     */ -    void dispatchActivityResult(int requestCode, int resultCode, Intent data) { -        List<OnActivityResultListener> list; -         -        synchronized (this) { -            if (mActivityResultListeners == null) return; -            list = new ArrayList<OnActivityResultListener>(mActivityResultListeners); -        } - -        final int N = list.size(); -        for (int i = 0; i < N; i++) { -            if (list.get(i).onActivityResult(requestCode, resultCode, data)) { -                break; -            } -        } -    } - -    /** -     * Registers a listener. -     *  -     * @see OnActivityStopListener -     */ -    void registerOnActivityStopListener(OnActivityStopListener listener) { -        synchronized (this) { -            if (mActivityStopListeners == null) { -                mActivityStopListeners = new ArrayList<OnActivityStopListener>(); -            } -             -            if (!mActivityStopListeners.contains(listener)) { -                mActivityStopListeners.add(listener); -            } -        } -    } -     -    /** -     * Unregisters a listener. -     *  -     * @see OnActivityStopListener -     */ -    void unregisterOnActivityStopListener(OnActivityStopListener listener) { -        synchronized (this) { -            if (mActivityStopListeners != null) { -                mActivityStopListeners.remove(listener); -            } -        } -    } -     -    /** -     * Called by the {@link PreferenceManager} to dispatch the activity stop -     * event. -     */ -    void dispatchActivityStop() { -        List<OnActivityStopListener> list; -         -        synchronized (this) { -            if (mActivityStopListeners == null) return; -            list = new ArrayList<OnActivityStopListener>(mActivityStopListeners); -        } - -        final int N = list.size(); -        for (int i = 0; i < N; i++) { -            list.get(i).onActivityStop(); -        } -    } - -    /** -     * Registers a listener. -     *  -     * @see OnActivityDestroyListener -     */ -    void registerOnActivityDestroyListener(OnActivityDestroyListener listener) { -        synchronized (this) { -            if (mActivityDestroyListeners == null) { -                mActivityDestroyListeners = new ArrayList<OnActivityDestroyListener>(); -            } - -            if (!mActivityDestroyListeners.contains(listener)) { -                mActivityDestroyListeners.add(listener); -            } -        } -    } -     -    /** -     * Unregisters a listener. -     *  -     * @see OnActivityDestroyListener -     */ -    void unregisterOnActivityDestroyListener(OnActivityDestroyListener listener) { -        synchronized (this) { -            if (mActivityDestroyListeners != null) { -                mActivityDestroyListeners.remove(listener); -            } -        } -    } -     -    /** -     * Called by the {@link PreferenceManager} to dispatch the activity destroy -     * event. -     */ -    void dispatchActivityDestroy() { -        List<OnActivityDestroyListener> list = null; -         -        synchronized (this) { -            if (mActivityDestroyListeners != null) { -                list = new ArrayList<OnActivityDestroyListener>(mActivityDestroyListeners); -            } -        } - -        if (list != null) { -            final int N = list.size(); -            for (int i = 0; i < N; i++) { -                list.get(i).onActivityDestroy(); -            } -        } - -        // Dismiss any PreferenceScreens still showing -        dismissAllScreens(); -    } -     -    /** -     * Returns a request code that is unique for the activity. Each subsequent -     * call to this method should return another unique request code. -     *  -     * @return A unique request code that will never be used by anyone other -     *         than the caller of this method. -     */ -    int getNextRequestCode() { -        synchronized (this) { -            return mNextRequestCode++; -        } -    } -     -    void addPreferencesScreen(DialogInterface screen) { -        synchronized (this) { -             -            if (mPreferencesScreens == null) { -                mPreferencesScreens = new ArrayList<DialogInterface>(); -            } -             -            mPreferencesScreens.add(screen); -        } -    } -     -    void removePreferencesScreen(DialogInterface screen) { -        synchronized (this) { -             -            if (mPreferencesScreens == null) { -                return; -            } -             -            mPreferencesScreens.remove(screen); -        } -    } -     -    /** -     * Called by {@link PreferenceActivity} to dispatch the new Intent event. -     *  -     * @param intent The new Intent. -     */ -    void dispatchNewIntent(Intent intent) { -        dismissAllScreens(); -    } - -    private void dismissAllScreens() { -        // Remove any of the previously shown preferences screens -        ArrayList<DialogInterface> screensToDismiss; - -        synchronized (this) { -             -            if (mPreferencesScreens == null) { -                return; -            } -             -            screensToDismiss = new ArrayList<DialogInterface>(mPreferencesScreens); -            mPreferencesScreens.clear(); -        } -         -        for (int i = screensToDismiss.size() - 1; i >= 0; i--) { -            screensToDismiss.get(i).dismiss(); -        } -    } -     -    /** -     * Sets the callback to be invoked when a {@link Preference} in the -     * hierarchy rooted at this {@link PreferenceManager} is clicked. -     *  -     * @param listener The callback to be invoked. -     */ -    void setOnPreferenceTreeClickListener(OnPreferenceTreeClickListener listener) { -        mOnPreferenceTreeClickListener = listener; -    } - -    OnPreferenceTreeClickListener getOnPreferenceTreeClickListener() { -        return mOnPreferenceTreeClickListener; -    } -     -    /** -     * Interface definition for a callback to be invoked when a -     * {@link Preference} in the hierarchy rooted at this {@link PreferenceScreen} is -     * clicked. -     */ -    interface OnPreferenceTreeClickListener { -        /** -         * Called when a preference in the tree rooted at this -         * {@link PreferenceScreen} has been clicked. -         *  -         * @param preferenceScreen The {@link PreferenceScreen} that the -         *        preference is located in. -         * @param preference The preference that was clicked. -         * @return Whether the click was handled. -         */ -        boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference); -    } - -    /** -     * Interface definition for a class that will be called when the container's activity -     * receives an activity result. -     */ -    public interface OnActivityResultListener { -         -        /** -         * See Activity's onActivityResult. -         *  -         * @return Whether the request code was handled (in which case -         *         subsequent listeners will not be called. -         */ -        boolean onActivityResult(int requestCode, int resultCode, Intent data); -    } -     -    /** -     * Interface definition for a class that will be called when the container's activity -     * is stopped. -     */ -    public interface OnActivityStopListener { -         -        /** -         * See Activity's onStop. -         */ -        void onActivityStop(); -    } - -    /** -     * Interface definition for a class that will be called when the container's activity -     * is destroyed. -     */ -    public interface OnActivityDestroyListener { -         -        /** -         * See Activity's onDestroy. -         */ -        void onActivityDestroy(); -    } - -} diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java deleted file mode 100644 index 5353b53..0000000 --- a/core/java/android/preference/PreferenceScreen.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.AttributeSet; -import android.view.View; -import android.widget.Adapter; -import android.widget.AdapterView; -import android.widget.ListAdapter; -import android.widget.ListView; - -/** - * Represents a top-level {@link Preference} that - * is the root of a Preference hierarchy. A {@link PreferenceActivity} - * points to an instance of this class to show the preferences. To instantiate - * this class, use {@link PreferenceManager#createPreferenceScreen(Context)}. - * <ul> - * This class can appear in two places: - * <li> When a {@link PreferenceActivity} points to this, it is used as the root - * and is not shown (only the contained preferences are shown). - * <li> When it appears inside another preference hierarchy, it is shown and - * serves as the gateway to another screen of preferences (either by showing - * another screen of preferences as a {@link Dialog} or via a - * {@link Context#startActivity(android.content.Intent)} from the - * {@link Preference#getIntent()}). The children of this {@link PreferenceScreen} - * are NOT shown in the screen that this {@link PreferenceScreen} is shown in. - * Instead, a separate screen will be shown when this preference is clicked. - * </ul> - * <p>Here's an example XML layout of a PreferenceScreen:</p> - * <pre> -<PreferenceScreen -        xmlns:android="http://schemas.android.com/apk/res/android" -        android:key="first_preferencescreen"> -    <CheckBoxPreference -            android:key="wifi enabled" -            android:title="WiFi" /> -    <PreferenceScreen -            android:key="second_preferencescreen" -            android:title="WiFi settings"> -        <CheckBoxPreference -                android:key="prefer wifi" -                android:title="Prefer WiFi" /> -        ... other preferences here ... -    </PreferenceScreen> -</PreferenceScreen> </pre> - * <p> - * In this example, the "first_preferencescreen" will be used as the root of the - * hierarchy and given to a {@link PreferenceActivity}. The first screen will - * show preferences "WiFi" (which can be used to quickly enable/disable WiFi) - * and "WiFi settings". The "WiFi settings" is the "second_preferencescreen" and when - * clicked will show another screen of preferences such as "Prefer WiFi" (and - * the other preferences that are children of the "second_preferencescreen" tag). - *  - * @see PreferenceCategory - */ -public final class PreferenceScreen extends PreferenceGroup implements AdapterView.OnItemClickListener, -        DialogInterface.OnDismissListener { - -    private ListAdapter mRootAdapter; -     -    private Dialog mDialog; -     -    /** -     * Do NOT use this constructor, use {@link PreferenceManager#createPreferenceScreen(Context)}. -     * @hide- -     */ -    public PreferenceScreen(Context context, AttributeSet attrs) { -        super(context, attrs, com.android.internal.R.attr.preferenceScreenStyle); -    } - -    /** -     * Returns an adapter that can be attached to a {@link PreferenceActivity} -     * to show the preferences contained in this {@link PreferenceScreen}. -     * <p> -     * This {@link PreferenceScreen} will NOT appear in the returned adapter, instead -     * it appears in the hierarchy above this {@link PreferenceScreen}. -     * <p> -     * This adapter's {@link Adapter#getItem(int)} should always return a -     * subclass of {@link Preference}. -     *  -     * @return An adapter that provides the {@link Preference} contained in this -     *         {@link PreferenceScreen}. -     */ -    public ListAdapter getRootAdapter() { -        if (mRootAdapter == null) { -            mRootAdapter = onCreateRootAdapter(); -        } -         -        return mRootAdapter; -    } -     -    /** -     * Creates the root adapter. -     *  -     * @return An adapter that contains the preferences contained in this {@link PreferenceScreen}. -     * @see #getRootAdapter() -     */ -    protected ListAdapter onCreateRootAdapter() { -        return new PreferenceGroupAdapter(this); -    } - -    /** -     * Binds a {@link ListView} to the preferences contained in this {@link PreferenceScreen} via -     * {@link #getRootAdapter()}. It also handles passing list item clicks to the corresponding -     * {@link Preference} contained by this {@link PreferenceScreen}. -     *  -     * @param listView The list view to attach to. -     */ -    public void bind(ListView listView) { -        listView.setOnItemClickListener(this); -        listView.setAdapter(getRootAdapter()); -         -        onAttachedToActivity(); -    } -     -    @Override -    protected void onClick() { -        if (getIntent() != null || getPreferenceCount() == 0) { -            return; -        } -         -        showDialog(null); -    } -     -    private void showDialog(Bundle state) { -        Context context = getContext(); -        ListView listView = new ListView(context); -        bind(listView); - -        Dialog dialog = mDialog = new Dialog(context, com.android.internal.R.style.Theme_NoTitleBar); -        dialog.setContentView(listView); -        dialog.setOnDismissListener(this); -        if (state != null) { -            dialog.onRestoreInstanceState(state); -        } -         -        // Add the screen to the list of preferences screens opened as dialogs -        getPreferenceManager().addPreferencesScreen(dialog); -         -        dialog.show(); -    } -     -    public void onDismiss(DialogInterface dialog) { -        mDialog = null; -        getPreferenceManager().removePreferencesScreen(dialog); -    } -     -    /** -     * Used to get a handle to the dialog.  -     * This is useful for cases where we want to manipulate the dialog -     * as we would with any other activity or view. -     */ -    public Dialog getDialog() { -        return mDialog; -    } - -    public void onItemClick(AdapterView parent, View view, int position, long id) { -        Object item = getRootAdapter().getItem(position); -        if (!(item instanceof Preference)) return; -         -        final Preference preference = (Preference) item;  -        preference.performClick(this); -    } - -    @Override -    protected boolean isOnSameScreenAsChildren() { -        return false; -    } -     -    @Override -    protected Parcelable onSaveInstanceState() { -        final Parcelable superState = super.onSaveInstanceState(); -        final Dialog dialog = mDialog; -        if (dialog == null || !dialog.isShowing()) { -            return superState; -        } -         -        final SavedState myState = new SavedState(superState); -        myState.isDialogShowing = true; -        myState.dialogBundle = dialog.onSaveInstanceState(); -        return myState; -    } - -    @Override -    protected void onRestoreInstanceState(Parcelable state) { -        if (state == null || !state.getClass().equals(SavedState.class)) { -            // Didn't save state for us in onSaveInstanceState -            super.onRestoreInstanceState(state); -            return; -        } -          -        SavedState myState = (SavedState) state; -        super.onRestoreInstanceState(myState.getSuperState()); -        if (myState.isDialogShowing) { -            showDialog(myState.dialogBundle); -        } -    } -     -    private static class SavedState extends BaseSavedState { -        boolean isDialogShowing; -        Bundle dialogBundle; -         -        public SavedState(Parcel source) { -            super(source); -            isDialogShowing = source.readInt() == 1; -            dialogBundle = source.readBundle(); -        } - -        @Override -        public void writeToParcel(Parcel dest, int flags) { -            super.writeToParcel(dest, flags); -            dest.writeInt(isDialogShowing ? 1 : 0); -            dest.writeBundle(dialogBundle); -        } - -        public SavedState(Parcelable superState) { -            super(superState); -        } - -        public static final Parcelable.Creator<SavedState> CREATOR = -                new Parcelable.Creator<SavedState>() { -            public SavedState createFromParcel(Parcel in) { -                return new SavedState(in); -            } - -            public SavedState[] newArray(int size) { -                return new SavedState[size]; -            } -        }; -    } -     -} diff --git a/core/java/android/preference/RingtonePreference.java b/core/java/android/preference/RingtonePreference.java deleted file mode 100644 index 6beb06d..0000000 --- a/core/java/android/preference/RingtonePreference.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import android.content.Context; -import android.content.Intent; -import android.content.res.TypedArray; -import android.media.RingtoneManager; -import android.net.Uri; -import android.provider.Settings.System; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.util.Log; - -/** - * A {@link Preference} that allows the user to choose a ringtone from those on the device.  - * The chosen ringtone's URI will be persisted as a string. - * <p> - * If the user chooses the "Default" item, the saved string will be one of - * {@link System#DEFAULT_RINGTONE_URI} or - * {@link System#DEFAULT_NOTIFICATION_URI}. If the user chooses the "Silent" - * item, the saved string will be an empty string. - *  - * @attr ref android.R.styleable#RingtonePreference_ringtoneType - * @attr ref android.R.styleable#RingtonePreference_showDefault - * @attr ref android.R.styleable#RingtonePreference_showSilent - */ -public class RingtonePreference extends Preference implements -        PreferenceManager.OnActivityResultListener { - -    private static final String TAG = "RingtonePreference"; - -    private int mRingtoneType; -    private boolean mShowDefault; -    private boolean mShowSilent; -     -    private int mRequestCode; - -    public RingtonePreference(Context context, AttributeSet attrs, int defStyle) { -        super(context, attrs, defStyle); -         -        TypedArray a = context.obtainStyledAttributes(attrs, -                com.android.internal.R.styleable.RingtonePreference, defStyle, 0); -        mRingtoneType = a.getInt(com.android.internal.R.styleable.RingtonePreference_ringtoneType, -                RingtoneManager.TYPE_RINGTONE); -        mShowDefault = a.getBoolean(com.android.internal.R.styleable.RingtonePreference_showDefault, -                true); -        mShowSilent = a.getBoolean(com.android.internal.R.styleable.RingtonePreference_showSilent, -                true); -        a.recycle(); -    } - -    public RingtonePreference(Context context, AttributeSet attrs) { -        this(context, attrs, com.android.internal.R.attr.ringtonePreferenceStyle); -    } -     -    public RingtonePreference(Context context) { -        this(context, null); -    } - -    /** -     * Returns the sound type(s) that are shown in the picker. -     *  -     * @return The sound type(s) that are shown in the picker. -     * @see #setRingtoneType(int) -     */ -    public int getRingtoneType() { -        return mRingtoneType; -    } - -    /** -     * Sets the sound type(s) that are shown in the picker. -     *  -     * @param type The sound type(s) that are shown in the picker. -     * @see RingtoneManager#EXTRA_RINGTONE_TYPE -     */ -    public void setRingtoneType(int type) { -        mRingtoneType = type; -    } - -    /** -     * Returns whether to a show an item for the default sound/ringtone. -     *  -     * @return Whether to show an item for the default sound/ringtone. -     */ -    public boolean getShowDefault() { -        return mShowDefault; -    } - -    /** -     * Sets whether to show an item for the default sound/ringtone. The default -     * to use will be deduced from the sound type(s) being shown. -     *  -     * @param showDefault Whether to show the default or not. -     * @see RingtoneManager#EXTRA_RINGTONE_SHOW_DEFAULT -     */ -    public void setShowDefault(boolean showDefault) { -        mShowDefault = showDefault; -    } - -    /** -     * Returns whether to a show an item for 'Silent'. -     *  -     * @return Whether to show an item for 'Silent'. -     */ -    public boolean getShowSilent() { -        return mShowSilent; -    } - -    /** -     * Sets whether to show an item for 'Silent'. -     *  -     * @param showSilent Whether to show 'Silent'. -     * @see RingtoneManager#EXTRA_RINGTONE_SHOW_SILENT -     */ -    public void setShowSilent(boolean showSilent) { -        mShowSilent = showSilent; -    } - -    @Override -    protected void onClick() { -        // Launch the ringtone picker -        Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); -        onPrepareRingtonePickerIntent(intent); -        getPreferenceManager().getActivity().startActivityForResult(intent, mRequestCode); -    } - -    /** -     * Prepares the intent to launch the ringtone picker. This can be modified -     * to adjust the parameters of the ringtone picker. -     *  -     * @param ringtonePickerIntent The ringtone picker intent that can be -     *            modified by putting extras. -     */ -    protected void onPrepareRingtonePickerIntent(Intent ringtonePickerIntent) { - -        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, -                onRestoreRingtone()); -         -        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, mShowDefault); -        if (mShowDefault) { -            ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, -                    RingtoneManager.getDefaultUri(getRingtoneType())); -        } - -        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, mShowSilent); -        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, mRingtoneType); -    } -     -    /** -     * Called when a ringtone is chosen. -     * <p> -     * By default, this saves the ringtone URI to the persistent storage as a -     * string. -     *  -     * @param ringtoneUri The chosen ringtone's {@link Uri}. Can be null. -     */ -    protected void onSaveRingtone(Uri ringtoneUri) { -        persistString(ringtoneUri != null ? ringtoneUri.toString() : ""); -    } - -    /** -     * Called when the chooser is about to be shown and the current ringtone -     * should be marked. Can return null to not mark any ringtone. -     * <p> -     * By default, this restores the previous ringtone URI from the persistent -     * storage. -     *  -     * @return The ringtone to be marked as the current ringtone. -     */ -    protected Uri onRestoreRingtone() { -        final String uriString = getPersistedString(null); -        return !TextUtils.isEmpty(uriString) ? Uri.parse(uriString) : null; -    } -     -    @Override -    protected Object onGetDefaultValue(TypedArray a, int index) { -        return a.getString(index); -    } - -    @Override -    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValueObj) { -        String defaultValue = (String) defaultValueObj; -         -        /* -         * This method is normally to make sure the internal state and UI -         * matches either the persisted value or the default value. Since we -         * don't show the current value in the UI (until the dialog is opened) -         * and we don't keep local state, if we are restoring the persisted -         * value we don't need to do anything. -         */ -        if (restorePersistedValue) { -            return; -        } -         -        // If we are setting to the default value, we should persist it. -        if (!TextUtils.isEmpty(defaultValue)) { -            onSaveRingtone(Uri.parse(defaultValue)); -        } -    } - -    @Override -    protected void onAttachedToHierarchy(PreferenceManager preferenceManager) { -        super.onAttachedToHierarchy(preferenceManager); -         -        preferenceManager.registerOnActivityResultListener(this); -        mRequestCode = preferenceManager.getNextRequestCode(); -    } - -    public boolean onActivityResult(int requestCode, int resultCode, Intent data) { -         -        if (requestCode == mRequestCode) { -             -            if (data != null) { -                Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); -                 -                if (callChangeListener(uri != null ? uri.toString() : "")) { -                    onSaveRingtone(uri); -                } -            } -             -            return true; -        } -         -        return false; -    } - -} diff --git a/core/java/android/preference/SeekBarPreference.java b/core/java/android/preference/SeekBarPreference.java deleted file mode 100644 index 658c2a7..0000000 --- a/core/java/android/preference/SeekBarPreference.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.preference.DialogPreference; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageView; -import android.widget.SeekBar; - -/** - * @hide - */ -public class SeekBarPreference extends DialogPreference { -    private static final String TAG = "SeekBarPreference"; -     -    private Drawable mMyIcon; - -    public SeekBarPreference(Context context, AttributeSet attrs) { -        super(context, attrs); - -        setDialogLayoutResource(com.android.internal.R.layout.seekbar_dialog); -        setPositiveButtonText(android.R.string.ok); -        setNegativeButtonText(android.R.string.cancel); -         -        // Steal the XML dialogIcon attribute's value -        mMyIcon = getDialogIcon(); -        setDialogIcon(null); -    } - -    @Override -    protected void onBindDialogView(View view) { -        super.onBindDialogView(view); -         -        final ImageView iconView = (ImageView) view.findViewById(android.R.id.icon); -        if (mMyIcon != null) { -            iconView.setImageDrawable(mMyIcon); -        } else { -            iconView.setVisibility(View.GONE); -        } -    } - -    protected static SeekBar getSeekBar(View dialogView) { -        return (SeekBar) dialogView.findViewById(com.android.internal.R.id.seekbar); -    } -} diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java deleted file mode 100644 index 6e215dc..0000000 --- a/core/java/android/preference/VolumePreference.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.preference; - -import android.content.Context; -import android.content.res.TypedArray; -import android.database.ContentObserver; -import android.media.Ringtone; -import android.media.RingtoneManager; -import android.media.AudioManager; -import android.os.Handler; -import android.preference.PreferenceManager; -import android.provider.Settings; -import android.provider.Settings.System; -import android.util.AttributeSet; -import android.view.View; -import android.widget.SeekBar; -import android.widget.SeekBar.OnSeekBarChangeListener; - -/** - * @hide - */ -public class VolumePreference extends SeekBarPreference implements  -        PreferenceManager.OnActivityStopListener { - -    private static final String TAG = "VolumePreference"; -     -    private int mStreamType; -     -    /** May be null if the dialog isn't visible. */ -    private SeekBarVolumizer mSeekBarVolumizer; -     -    public VolumePreference(Context context, AttributeSet attrs) { -        super(context, attrs); -         -        TypedArray a = context.obtainStyledAttributes(attrs, -                com.android.internal.R.styleable.VolumePreference, 0, 0); -        mStreamType = a.getInt(android.R.styleable.VolumePreference_streamType, 0); -        a.recycle();         -    } -     -    public void setStreamType(int streamType) { -        mStreamType = streamType; -    } - -    @Override -    protected void onBindDialogView(View view) { -        super.onBindDialogView(view); -     -        final SeekBar seekBar = (SeekBar) view.findViewById(com.android.internal.R.id.seekbar); -        mSeekBarVolumizer = new SeekBarVolumizer(getContext(), seekBar, mStreamType); -         -        getPreferenceManager().registerOnActivityStopListener(this); -    } - -    @Override -    protected void onDialogClosed(boolean positiveResult) { -        super.onDialogClosed(positiveResult); -         -        if (!positiveResult && mSeekBarVolumizer != null) { -            mSeekBarVolumizer.revertVolume(); -        } -         -        cleanup(); -    } - -    public void onActivityStop() { -        cleanup(); -    } - -    /** -     * Do clean up.  This can be called multiple times! -     */ -    private void cleanup() { -       getPreferenceManager().unregisterOnActivityStopListener(this); -        -       if (mSeekBarVolumizer != null) { -           mSeekBarVolumizer.stop(); -           mSeekBarVolumizer = null; -       } -    } -    -    protected void onSampleStarting(SeekBarVolumizer volumizer) { -        if (mSeekBarVolumizer != null && volumizer != mSeekBarVolumizer) { -            mSeekBarVolumizer.stopSample(); -        } -    } -     -    /** -     * Turns a {@link SeekBar} into a volume control. -     */ -    public class SeekBarVolumizer implements OnSeekBarChangeListener, Runnable { - -        private Context mContext; -        private Handler mHandler = new Handler(); -     -        private AudioManager mAudioManager; -        private int mStreamType; -        private int mOriginalStreamVolume;  -        private Ringtone mRingtone; -     -        private int mLastProgress; -        private SeekBar mSeekBar; -         -        private ContentObserver mVolumeObserver = new ContentObserver(mHandler) { -            @Override -            public void onChange(boolean selfChange) { -                super.onChange(selfChange); -     -                if (mSeekBar != null) { -                    mSeekBar.setProgress(System.getInt(mContext.getContentResolver(), -                            System.VOLUME_SETTINGS[mStreamType], 0)); -                } -            } -        }; -     -        public SeekBarVolumizer(Context context, SeekBar seekBar, int streamType) { -            mContext = context; -            mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); -            mStreamType = streamType; -            mSeekBar = seekBar; -             -            initSeekBar(seekBar); -        } - -        private void initSeekBar(SeekBar seekBar) { -            seekBar.setMax(mAudioManager.getStreamMaxVolume(mStreamType)); -            mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType); -            seekBar.setProgress(mOriginalStreamVolume); -            seekBar.setOnSeekBarChangeListener(this); -             -            mContext.getContentResolver().registerContentObserver( -                    System.getUriFor(System.VOLUME_SETTINGS[mStreamType]), -                    false, mVolumeObserver); -     -            mRingtone = RingtoneManager.getRingtone(mContext, -                    mStreamType == AudioManager.STREAM_NOTIFICATION -                            ? Settings.System.DEFAULT_NOTIFICATION_URI -                            : Settings.System.DEFAULT_RINGTONE_URI); -            mRingtone.setStreamType(mStreamType); -        } -         -        public void stop() { -            stopSample(); -            mContext.getContentResolver().unregisterContentObserver(mVolumeObserver); -            mSeekBar.setOnSeekBarChangeListener(null); -        } -         -        public void revertVolume() { -            mAudioManager.setStreamVolume(mStreamType, mOriginalStreamVolume, 0); -        } -         -        public void onProgressChanged(SeekBar seekBar, int progress, -                boolean fromTouch) { -            if (!fromTouch) { -                return; -            } -     -            postSetVolume(progress); -        } - -        private void postSetVolume(int progress) { -            // Do the volume changing separately to give responsive UI -            mLastProgress = progress; -            mHandler.removeCallbacks(this); -            mHandler.post(this); -        } -     -        public void onStartTrackingTouch(SeekBar seekBar) { -        } - -        public void onStopTrackingTouch(SeekBar seekBar) { -            if (mRingtone != null && !mRingtone.isPlaying()) { -                sample(); -            } -        } -         -        public void run() { -            mAudioManager.setStreamVolume(mStreamType, mLastProgress, 0); -        } -         -        private void sample() { -     -            // Only play a preview sample when controlling the ringer stream -            if (mStreamType != AudioManager.STREAM_RING -                    && mStreamType != AudioManager.STREAM_NOTIFICATION) { -                return; -            } -     -            onSampleStarting(this); -            mRingtone.play(); -        } -     -        public void stopSample() { -            if (mRingtone != null) { -                mRingtone.stop(); -            } -        } - -        public SeekBar getSeekBar() { -            return mSeekBar; -        } -         -    } -} diff --git a/core/java/android/preference/package.html b/core/java/android/preference/package.html deleted file mode 100644 index d24d5bb..0000000 --- a/core/java/android/preference/package.html +++ /dev/null @@ -1,23 +0,0 @@ -<HTML> -<BODY> -Provides classes that manage application preferences and implement the preferences UI. -Using these ensures that all the preferences within each application are maintained  -in the same manner and the user experience is consistent with that of the system and  -other applications. -<p> -The preferences portion of an application  -should be ran as a separate {@link android.app.Activity} that extends -the {@link android.preference.PreferenceActivity} class. In the PreferenceActivity, a  -{@link android.preference.PreferenceScreen} object should be the root element of the layout.  -The PreferenceScreen contains {@link android.preference.Preference} elements such as a  -{@link android.preference.CheckBoxPreference}, {@link android.preference.EditTextPreference},  -{@link android.preference.ListPreference}, {@link android.preference.PreferenceCategory}, -or {@link android.preference.RingtonePreference}. </p> -<p> -All settings made for a given {@link android.preference.Preference} will be automatically saved -to the application's instance of {@link android.content.SharedPreferences}. Access to the  -SharedPreferences is simple with {@link android.preference.Preference#getSharedPreferences()}.</p> -<p> -Note that saved preferences are accessible only to the application that created them.</p> -</BODY> -</HTML> | 
