diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
commit | 9066cfe9886ac131c34d59ed0e2d287b0e3c0087 (patch) | |
tree | d88beb88001f2482911e3d28e43833b50e4b4e97 /core/java/android/preference/PreferenceInflater.java | |
parent | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (diff) | |
download | frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.zip frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.gz frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'core/java/android/preference/PreferenceInflater.java')
-rw-r--r-- | core/java/android/preference/PreferenceInflater.java | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/core/java/android/preference/PreferenceInflater.java b/core/java/android/preference/PreferenceInflater.java new file mode 100644 index 0000000..779e746 --- /dev/null +++ b/core/java/android/preference/PreferenceInflater.java @@ -0,0 +1,103 @@ +/* + * 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; + } + } + +} |