diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2014-09-24 18:48:11 -0700 |
---|---|---|
committer | Fabrice Di Meglio <fdimeglio@google.com> | 2014-09-26 13:38:12 -0700 |
commit | b22be6fcf2689a7de3795f406678caf73180a990 (patch) | |
tree | 0db1d8f2313165a955ed321c65b951b0642cbb19 /core/java/android/preference | |
parent | 75b8966cad24354272759a1579376f7e64e40050 (diff) | |
download | frameworks_base-b22be6fcf2689a7de3795f406678caf73180a990.zip frameworks_base-b22be6fcf2689a7de3795f406678caf73180a990.tar.gz frameworks_base-b22be6fcf2689a7de3795f406678caf73180a990.tar.bz2 |
Fix bug #17521147 Settings activity looks terrible on Volantis
- update layouts for PreferenceActivity and its headers
in two panes mode (per UX request)
- add theming where it was missing
Change-Id: I0c478c1a66b6de7e122b7ee73da24f3dd5a7bc28
Diffstat (limited to 'core/java/android/preference')
-rw-r--r-- | core/java/android/preference/PreferenceActivity.java | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java index 23b1e2c..04cd7d5 100644 --- a/core/java/android/preference/PreferenceActivity.java +++ b/core/java/android/preference/PreferenceActivity.java @@ -212,6 +212,9 @@ public abstract class PreferenceActivity extends ListActivity implements private Button mNextButton; + private int mPreferenceHeaderItemResId = 0; + private boolean mPreferenceHeaderRemoveEmptyIcon = false; + /** * The starting request code given out to preference framework. */ @@ -258,10 +261,15 @@ public abstract class PreferenceActivity extends ListActivity implements } private LayoutInflater mInflater; + private int mLayoutResId; + private boolean mRemoveIconIfEmpty; - public HeaderAdapter(Context context, List<Header> objects) { + public HeaderAdapter(Context context, List<Header> objects, int layoutResId, + boolean removeIconBehavior) { super(context, 0, objects); mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mLayoutResId = layoutResId; + mRemoveIconIfEmpty = removeIconBehavior; } @Override @@ -270,8 +278,7 @@ public abstract class PreferenceActivity extends ListActivity implements View view; if (convertView == null) { - view = mInflater.inflate(com.android.internal.R.layout.preference_header_item, - parent, false); + view = mInflater.inflate(mLayoutResId, parent, false); holder = new HeaderViewHolder(); holder.icon = (ImageView) view.findViewById(com.android.internal.R.id.icon); holder.title = (TextView) view.findViewById(com.android.internal.R.id.title); @@ -284,7 +291,16 @@ public abstract class PreferenceActivity extends ListActivity implements // All view fields must be updated every time, because the view may be recycled Header header = getItem(position); - holder.icon.setImageResource(header.iconRes); + if (mRemoveIconIfEmpty) { + if (header.iconRes == 0) { + holder.icon.setVisibility(View.GONE); + } else { + holder.icon.setVisibility(View.VISIBLE); + holder.icon.setImageResource(header.iconRes); + } + } else { + holder.icon.setImageResource(header.iconRes); + } holder.title.setText(header.getTitle(getContext().getResources())); CharSequence summary = header.getSummary(getContext().getResources()); if (!TextUtils.isEmpty(summary)) { @@ -512,7 +528,26 @@ public abstract class PreferenceActivity extends ListActivity implements protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(com.android.internal.R.layout.preference_list_content); + // Theming for the PreferenceActivity layout and for the Preference Header(s) layout + TypedArray sa = obtainStyledAttributes(null, + com.android.internal.R.styleable.PreferenceActivity, + com.android.internal.R.attr.preferenceActivityStyle, + 0); + + final int layoutResId = sa.getResourceId( + com.android.internal.R.styleable.PreferenceActivity_layout, + com.android.internal.R.layout.preference_list_content); + + mPreferenceHeaderItemResId = sa.getResourceId( + com.android.internal.R.styleable.PreferenceActivity_headerLayout, + com.android.internal.R.layout.preference_header_item); + mPreferenceHeaderRemoveEmptyIcon = sa.getBoolean( + com.android.internal.R.styleable.PreferenceActivity_headerRemoveIconIfEmpty, + false); + + sa.recycle(); + + setContentView(layoutResId); mListFooter = (FrameLayout)findViewById(com.android.internal.R.id.list_footer); mPrefsContainer = (ViewGroup) findViewById(com.android.internal.R.id.prefs_frame); @@ -582,7 +617,8 @@ public abstract class PreferenceActivity extends ListActivity implements showBreadCrumbs(initialTitleStr, initialShortTitleStr); } } else if (mHeaders.size() > 0) { - setListAdapter(new HeaderAdapter(this, mHeaders)); + setListAdapter(new HeaderAdapter(this, mHeaders, mPreferenceHeaderItemResId, + mPreferenceHeaderRemoveEmptyIcon)); if (!mSinglePane) { // Multi-pane. getListView().setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); |