/* * Copyright (C) 2015 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.support.v7.preference; import android.content.Context; import android.support.annotation.RestrictTo; import android.support.v4.content.res.TypedArrayUtils; import android.util.AttributeSet; import static android.support.annotation.RestrictTo.Scope.GROUP_ID; /** * Represents a top-level {@link Preference} that * is the root of a Preference hierarchy. A {@link PreferenceFragmentCompat} * points to an instance of this class to show the preferences. To instantiate * this class, use {@link PreferenceManager#createPreferenceScreen(android.content.Context)}. * *

Here's an example XML layout of a PreferenceScreen:

*
 <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> 
*

* In this example, the "first_preferencescreen" will be used as the root of the * hierarchy and given to a {@link android.support.v14.preference.PreferenceFragment} * or {@link PreferenceFragmentCompat}. * 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). * *

*

Developer Guides

*

For information about building a settings UI with Preferences, * read the Settings * guide.

*
* * @see PreferenceCategory */ public final class PreferenceScreen extends PreferenceGroup { private boolean mShouldUseGeneratedIds = true; /** * Do NOT use this constructor, use {@link PreferenceManager#createPreferenceScreen(Context)}. * @hide */ @RestrictTo(GROUP_ID) public PreferenceScreen(Context context, AttributeSet attrs) { super(context, attrs, TypedArrayUtils.getAttr(context, R.attr.preferenceScreenStyle, android.R.attr.preferenceScreenStyle)); } @Override protected void onClick() { if (getIntent() != null || getFragment() != null || getPreferenceCount() == 0) { return; } final PreferenceManager.OnNavigateToScreenListener listener = getPreferenceManager().getOnNavigateToScreenListener(); if (listener != null) { listener.onNavigateToScreen(this); } } @Override protected boolean isOnSameScreenAsChildren() { return false; } /** * See {@link #setShouldUseGeneratedIds(boolean)} * @return {@code true} if the adapter should use the preference IDs generated by * {@link PreferenceGroup#addPreference(Preference)} as stable item IDs */ public boolean shouldUseGeneratedIds() { return mShouldUseGeneratedIds; } /** * Set whether the adapter created for this screen should attempt to use the preference IDs * generated by {@link PreferenceGroup#addPreference(Preference)} as stable item IDs. Setting * this to false can suppress unwanted animations if {@link Preference} objects are frequently * removed from and re-added to their containing {@link PreferenceGroup}. *

* This method may only be called when the preference screen is not attached to the hierarchy. *

* Default value is {@code true}. * * @param shouldUseGeneratedIds {@code true} if the adapter should use the preference ID as a * stable ID, or {@code false} to disable the use of * stable IDs */ public void setShouldUseGeneratedIds(boolean shouldUseGeneratedIds) { if (isAttached()) { throw new IllegalStateException("Cannot change the usage of generated IDs while" + " attached to the preference hierarchy"); } mShouldUseGeneratedIds = shouldUseGeneratedIds; } }