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;
884c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Leeimport android.os.UserHandle;
984c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Leeimport android.os.UserManager;
10af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.preference.PreferenceManager;
11af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.preference.PreferenceActivity.Header;
12bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.text.TextUtils;
13bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.view.LayoutInflater;
14af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport android.view.MenuItem;
15bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.view.View;
16bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.view.ViewGroup;
17bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.ArrayAdapter;
18bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.ImageView;
19bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.ListAdapter;
20bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chenimport android.widget.TextView;
21af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
22af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport com.android.dialer.DialtactsActivity;
23af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport com.android.dialer.R;
247fa029f77d97aaa7227d961354f9a2e32dd63a95Sai Cheemalapatiimport com.android.dialerbind.analytics.AnalyticsPreferenceActivity;
25af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
26af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Leeimport java.util.List;
27af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
287fa029f77d97aaa7227d961354f9a2e32dd63a95Sai Cheemalapatipublic class DialerSettingsActivity extends AnalyticsPreferenceActivity {
29af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
30af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    protected SharedPreferences mPreferences;
31bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen    private HeaderAdapter mHeaderAdapter;
32af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
3384c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee    private static final int OWNER_HANDLE_ID = 0;
3484c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee
35af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    @Override
36af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    protected void onCreate(Bundle savedInstanceState) {
37af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee        super.onCreate(savedInstanceState);
38af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee        mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
39af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    }
40af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
41af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    @Override
42af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    public void onBuildHeaders(List<Header> target) {
43e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        final Header generalSettingsHeader = new Header();
44e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        generalSettingsHeader.titleRes = R.string.general_settings_label;
45e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        generalSettingsHeader.summaryRes = R.string.general_settings_description;
46e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        generalSettingsHeader.fragment = GeneralSettingsFragment.class.getName();
47e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        target.add(generalSettingsHeader);
48af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
4984c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        // Only add the call settings header if the current user is the primary/owner user.
5084c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        if (isPrimaryUser()) {
5184c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee            final Header callSettingHeader = new Header();
5284c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee            callSettingHeader.titleRes = R.string.call_settings_label;
5384c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee            callSettingHeader.summaryRes = R.string.call_settings_description;
5484c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee            callSettingHeader.intent = DialtactsActivity.getCallSettingsIntent();
5584c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee            target.add(callSettingHeader);
5684c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        }
57af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    }
58af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
59af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    @Override
60af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    public boolean onOptionsItemSelected(MenuItem item) {
61af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee        if (item.getItemId() == android.R.id.home) {
62af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee            onBackPressed();
63af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee            return true;
64af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee        }
65af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee        return false;
66af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    }
67af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee
68af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    @Override
69af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    protected boolean isValidFragment(String fragmentName) {
70af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee        return true;
71af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee    }
72bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen
73bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen    @Override
74bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen    public void setListAdapter(ListAdapter adapter) {
75bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        if (adapter == null) {
76bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            super.setListAdapter(null);
77bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        } else {
78bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            // We don't have access to the hidden getHeaders() method, so grab the headers from
79bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            // the intended adapter and then replace it with our own.
80bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            int headerCount = adapter.getCount();
81bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            List<Header> headers = Lists.newArrayList();
82bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            for (int i = 0; i < headerCount; i++) {
83bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                headers.add((Header) adapter.getItem(i));
84bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            }
85bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            mHeaderAdapter = new HeaderAdapter(this, headers);
86bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            super.setListAdapter(mHeaderAdapter);
87bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        }
88bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen    }
89bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen
90bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen    /**
9184c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee     * Whether a user handle associated with the current user is that of the primary owner. That is,
9284c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee     * whether there is a user handle which has an id which matches the owner's handle.
9384c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee     * @return Whether the current user is the primary user.
9484c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee     */
9584c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee    private boolean isPrimaryUser() {
9684c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
9784c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        List<UserHandle> userHandles = userManager.getUserProfiles();
9884c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        for (int i = 0; i < userHandles.size(); i++){
9984c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee            if (userHandles.get(i).myUserId() == OWNER_HANDLE_ID) {
10084c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee                return true;
10184c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee            }
10284c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        }
10384c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee
10484c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee        return false;
10584c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee    }
10684c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee
10784c3780d1bb720aca5706ecaccfc58a4638db5edAndrew Lee    /**
108bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen     * This custom {@code ArrayAdapter} is mostly identical to the equivalent one in
109bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen     * {@code PreferenceActivity}, except with a local layout resource.
110bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen     */
111bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen    private static class HeaderAdapter extends ArrayAdapter<Header> {
112bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        static class HeaderViewHolder {
113bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            TextView title;
114bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            TextView summary;
115bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        }
116bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen
117bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        private LayoutInflater mInflater;
118bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen
119bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        public HeaderAdapter(Context context, List<Header> objects) {
120bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            super(context, 0, objects);
121bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
122bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        }
123bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen
124bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        @Override
125bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        public View getView(int position, View convertView, ViewGroup parent) {
126bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            HeaderViewHolder holder;
127bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            View view;
128bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen
129bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            if (convertView == null) {
130bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                view = mInflater.inflate(R.layout.dialer_preferences, parent, false);
131bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                holder = new HeaderViewHolder();
132bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                holder.title = (TextView) view.findViewById(R.id.title);
133bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                holder.summary = (TextView) view.findViewById(R.id.summary);
134bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                view.setTag(holder);
135bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            } else {
136bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                view = convertView;
137bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                holder = (HeaderViewHolder) view.getTag();
138bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            }
139bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen
140bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            // All view fields must be updated every time, because the view may be recycled
141bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            Header header = getItem(position);
142bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            holder.title.setText(header.getTitle(getContext().getResources()));
143bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            CharSequence summary = header.getSummary(getContext().getResources());
144bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            if (!TextUtils.isEmpty(summary)) {
145bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                holder.summary.setVisibility(View.VISIBLE);
146bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                holder.summary.setText(summary);
147bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            } else {
148bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen                holder.summary.setVisibility(View.GONE);
149bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            }
150bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen            return view;
151bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen        }
152bbde565ac6005fec3b0c95fd6cf8feb9723ff02fNancy Chen    }
153af6f195af0bb200d1bb06ad11dac476e8dff0073Yorke Lee}
154