diff --git a/core/java/android/preference/PreferenceFrameLayout.java b/core/java/android/preference/PreferenceFrameLayout.java
new file mode 100644
index 0000000000000..426abf0222ef7
--- /dev/null
+++ b/core/java/android/preference/PreferenceFrameLayout.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2010 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.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+
+/**
+ * @hide
+ */
+public class PreferenceFrameLayout extends FrameLayout {
+ private static final int DEFAULT_TOP_PADDING = 0;
+ private static final int DEFAULT_BOTTOM_PADDING = 0;
+ private final int mTopPadding;
+ private final int mBottomPadding;
+ private boolean mPaddingApplied = false;
+
+ public PreferenceFrameLayout(Context context) {
+ this(context, null);
+ }
+
+ public PreferenceFrameLayout(Context context, AttributeSet attrs) {
+ this(context, attrs, com.android.internal.R.attr.preferenceFrameLayoutStyle);
+ }
+
+ public PreferenceFrameLayout(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ TypedArray a = context.obtainStyledAttributes(attrs,
+ com.android.internal.R.styleable.PreferenceFrameLayout, defStyle, 0);
+
+ mTopPadding = (int) a.getDimension(
+ com.android.internal.R.styleable.PreferenceFrameLayout_topPadding,
+ DEFAULT_TOP_PADDING);
+ mBottomPadding = (int) a.getDimension(
+ com.android.internal.R.styleable.PreferenceFrameLayout_bottomPadding,
+ DEFAULT_BOTTOM_PADDING);
+
+ a.recycle();
+ }
+
+ @Override
+ public void addView(View child) {
+ int topPadding = getPaddingTop();
+ int bottomPadding = getPaddingBottom();
+ // Check on the id of the child before adding it.
+ if (child != null && child.getId() != com.android.internal.R.id.default_preference_layout) {
+ // Add the padding to the view group after determining if the padding already exists.
+ if (!mPaddingApplied) {
+ topPadding += mTopPadding;
+ bottomPadding += mBottomPadding;
+ mPaddingApplied = true;
+ }
+ } else {
+ if (mPaddingApplied) {
+ topPadding -= mTopPadding;
+ bottomPadding -= mBottomPadding;
+ mPaddingApplied = false;
+ }
+ }
+ int previousTop = getPaddingTop();
+ int previousBottom = getPaddingBottom();
+ if (previousTop != topPadding || previousBottom != bottomPadding) {
+ setPadding(getPaddingLeft(), topPadding, getPaddingRight(), bottomPadding);
+ }
+ super.addView(child);
+ }
+}
\ No newline at end of file
diff --git a/core/res/res/layout/preference_list_content.xml b/core/res/res/layout/preference_list_content.xml
index 6c0e773d69248..0f844180c2be5 100644
--- a/core/res/res/layout/preference_list_content.xml
+++ b/core/res/res/layout/preference_list_content.xml
@@ -56,7 +56,7 @@
-
diff --git a/core/res/res/layout/preference_list_fragment.xml b/core/res/res/layout/preference_list_fragment.xml
index c499b8a0a57c9..dbe0df0c49e32 100644
--- a/core/res/res/layout/preference_list_fragment.xml
+++ b/core/res/res/layout/preference_list_fragment.xml
@@ -18,6 +18,7 @@
-->
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 770adf5a81e02..3f81a895b9328 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -610,6 +610,9 @@
+
+
+
@@ -2135,6 +2138,12 @@
+
+
+
+
+
+
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 4aa16f9325adb..6985de6a57d8a 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -48,10 +48,15 @@
- @android:drawable/popup_bottom_medium
- @android:drawable/popup_center_medium
-
+
+
+
-
+
+
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 9215bf22c634e..1ef99d0b21391 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -262,13 +262,16 @@
- @android:drawable/search_dropdown_dark
+
+
+ - @android:style/Widget.PreferenceFrameLayout
-
+
-
+