DialerSettingsActivity.java revision bbde565ac6005fec3b0c95fd6cf8feb9723ff02f
1af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leepackage com.android.dialer.settings; 2af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 3bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport com.google.common.collect.Lists; 4bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 5bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.content.Context; 6af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.content.SharedPreferences; 7af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.os.Bundle; 8af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.preference.PreferenceActivity; 9af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.preference.PreferenceManager; 10af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.preference.PreferenceActivity.Header; 11bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.text.TextUtils; 12bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.view.LayoutInflater; 13af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.view.MenuItem; 14bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.view.View; 15bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.view.ViewGroup; 16bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.ArrayAdapter; 17bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.ImageView; 18bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.ListAdapter; 19bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.TextView; 20af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 21af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport com.android.contacts.common.preference.DisplayOptionsPreferenceFragment; 22af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport com.android.dialer.DialtactsActivity; 23af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport com.android.dialer.R; 24af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 25af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport java.util.List; 26af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 27af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leepublic class DialerSettingsActivity extends PreferenceActivity { 28af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 29af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee protected SharedPreferences mPreferences; 30bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen private HeaderAdapter mHeaderAdapter; 31af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 32af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee @Override 33af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee protected void onCreate(Bundle savedInstanceState) { 34af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee super.onCreate(savedInstanceState); 35af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee mPreferences = PreferenceManager.getDefaultSharedPreferences(this); 36bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen final int topPadding = getResources().getDimensionPixelSize( 37bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen R.dimen.preference_list_top_padding); 38bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen getListView().setPadding(0, topPadding, 0, 0); 39af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee } 40af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 41af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee @Override 42af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee public void onBuildHeaders(List<Header> target) { 43af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee final Header contactDisplayHeader = new Header(); 44af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee contactDisplayHeader.titleRes = R.string.settings_contact_display_options_title; 45af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee contactDisplayHeader.summaryRes = R.string.settings_contact_display_options_description; 46af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee contactDisplayHeader.fragment = DisplayOptionsPreferenceFragment.class.getName(); 47af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee target.add(contactDisplayHeader); 48af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 49af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee final Header callSettingHeader = new Header(); 50af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee callSettingHeader.titleRes = R.string.call_settings_label; 51af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee callSettingHeader.summaryRes = R.string.call_settings_description; 52af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee callSettingHeader.intent = DialtactsActivity.getCallSettingsIntent(); 53af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee target.add(callSettingHeader); 54af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee } 55af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 56af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee @Override 57af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee public boolean onOptionsItemSelected(MenuItem item) { 58af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee if (item.getItemId() == android.R.id.home) { 59af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee onBackPressed(); 60af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee return true; 61af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee } 62af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee return false; 63af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee } 64af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee 65af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee @Override 66af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee protected boolean isValidFragment(String fragmentName) { 67af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee return true; 68af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee } 69bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 70bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen @Override 71bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen public void setListAdapter(ListAdapter adapter) { 72bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen if (adapter == null) { 73bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen super.setListAdapter(null); 74bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } else { 75bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen // We don't have access to the hidden getHeaders() method, so grab the headers from 76bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen // the intended adapter and then replace it with our own. 77bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen int headerCount = adapter.getCount(); 78bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen List<Header> headers = Lists.newArrayList(); 79bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen for (int i = 0; i < headerCount; i++) { 80bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen headers.add((Header) adapter.getItem(i)); 81bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 82bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen mHeaderAdapter = new HeaderAdapter(this, headers); 83bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen super.setListAdapter(mHeaderAdapter); 84bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 85bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 86bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 87bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen /** 88bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen * This custom {@code ArrayAdapter} is mostly identical to the equivalent one in 89bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen * {@code PreferenceActivity}, except with a local layout resource. 90bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen */ 91bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen private static class HeaderAdapter extends ArrayAdapter<Header> { 92bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen static class HeaderViewHolder { 93bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen ImageView icon; 94bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen TextView title; 95bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen TextView summary; 96bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 97bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 98bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen private LayoutInflater mInflater; 99bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 100bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen public HeaderAdapter(Context context, List<Header> objects) { 101bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen super(context, 0, objects); 102bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 103bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 104bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 105bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen @Override 106bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen public View getView(int position, View convertView, ViewGroup parent) { 107bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen HeaderViewHolder holder; 108bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen View view; 109bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 110bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen if (convertView == null) { 111bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen view = mInflater.inflate(R.layout.dialer_preferences, parent, false); 112bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder = new HeaderViewHolder(); 113bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.icon = (ImageView) view.findViewById(R.id.icon); 114bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.title = (TextView) view.findViewById(R.id.title); 115bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.summary = (TextView) view.findViewById(R.id.summary); 116bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen view.setTag(holder); 117bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } else { 118bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen view = convertView; 119bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder = (HeaderViewHolder) view.getTag(); 120bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 121bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 122bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen // All view fields must be updated every time, because the view may be recycled 123bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen Header header = getItem(position); 124bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.icon.setImageResource(header.iconRes); 125bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.title.setText(header.getTitle(getContext().getResources())); 126bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen CharSequence summary = header.getSummary(getContext().getResources()); 127bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen if (!TextUtils.isEmpty(summary)) { 128bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.summary.setVisibility(View.VISIBLE); 129bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.summary.setText(summary); 130bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } else { 131bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen holder.summary.setVisibility(View.GONE); 132bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 133bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen 134bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen return view; 135bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 136bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen } 137af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee} 138