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