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