• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.dialer.settings;
2 
3 import com.google.common.collect.Lists;
4 
5 import android.content.Context;
6 import android.content.SharedPreferences;
7 import android.os.Bundle;
8 import android.os.UserHandle;
9 import android.os.UserManager;
10 import android.preference.PreferenceManager;
11 import android.preference.PreferenceActivity.Header;
12 import android.text.TextUtils;
13 import android.view.LayoutInflater;
14 import android.view.MenuItem;
15 import android.view.View;
16 import android.view.ViewGroup;
17 import android.widget.ArrayAdapter;
18 import android.widget.ImageView;
19 import android.widget.ListAdapter;
20 import android.widget.TextView;
21 
22 import com.android.dialer.DialtactsActivity;
23 import com.android.dialer.R;
24 import com.android.dialerbind.analytics.AnalyticsPreferenceActivity;
25 
26 import java.util.List;
27 
28 public class DialerSettingsActivity extends AnalyticsPreferenceActivity {
29 
30     protected SharedPreferences mPreferences;
31     private HeaderAdapter mHeaderAdapter;
32 
33     private static final int OWNER_HANDLE_ID = 0;
34 
35     @Override
onCreate(Bundle savedInstanceState)36     protected void onCreate(Bundle savedInstanceState) {
37         super.onCreate(savedInstanceState);
38         mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
39     }
40 
41     @Override
onBuildHeaders(List<Header> target)42     public void onBuildHeaders(List<Header> target) {
43         final Header generalSettingsHeader = new Header();
44         generalSettingsHeader.titleRes = R.string.general_settings_label;
45         generalSettingsHeader.summaryRes = R.string.general_settings_description;
46         generalSettingsHeader.fragment = GeneralSettingsFragment.class.getName();
47         target.add(generalSettingsHeader);
48 
49         // Only add the call settings header if the current user is the primary/owner user.
50         if (isPrimaryUser()) {
51             final Header callSettingHeader = new Header();
52             callSettingHeader.titleRes = R.string.call_settings_label;
53             callSettingHeader.summaryRes = R.string.call_settings_description;
54             callSettingHeader.intent = DialtactsActivity.getCallSettingsIntent();
55             target.add(callSettingHeader);
56         }
57     }
58 
59     @Override
onOptionsItemSelected(MenuItem item)60     public boolean onOptionsItemSelected(MenuItem item) {
61         if (item.getItemId() == android.R.id.home) {
62             onBackPressed();
63             return true;
64         }
65         return false;
66     }
67 
68     @Override
isValidFragment(String fragmentName)69     protected boolean isValidFragment(String fragmentName) {
70         return true;
71     }
72 
73     @Override
setListAdapter(ListAdapter adapter)74     public void setListAdapter(ListAdapter adapter) {
75         if (adapter == null) {
76             super.setListAdapter(null);
77         } else {
78             // We don't have access to the hidden getHeaders() method, so grab the headers from
79             // the intended adapter and then replace it with our own.
80             int headerCount = adapter.getCount();
81             List<Header> headers = Lists.newArrayList();
82             for (int i = 0; i < headerCount; i++) {
83                 headers.add((Header) adapter.getItem(i));
84             }
85             mHeaderAdapter = new HeaderAdapter(this, headers);
86             super.setListAdapter(mHeaderAdapter);
87         }
88     }
89 
90     /**
91      * Whether a user handle associated with the current user is that of the primary owner. That is,
92      * whether there is a user handle which has an id which matches the owner's handle.
93      * @return Whether the current user is the primary user.
94      */
isPrimaryUser()95     private boolean isPrimaryUser() {
96         UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
97         List<UserHandle> userHandles = userManager.getUserProfiles();
98         for (int i = 0; i < userHandles.size(); i++){
99             if (userHandles.get(i).myUserId() == OWNER_HANDLE_ID) {
100                 return true;
101             }
102         }
103 
104         return false;
105     }
106 
107     /**
108      * This custom {@code ArrayAdapter} is mostly identical to the equivalent one in
109      * {@code PreferenceActivity}, except with a local layout resource.
110      */
111     private static class HeaderAdapter extends ArrayAdapter<Header> {
112         static class HeaderViewHolder {
113             TextView title;
114             TextView summary;
115         }
116 
117         private LayoutInflater mInflater;
118 
HeaderAdapter(Context context, List<Header> objects)119         public HeaderAdapter(Context context, List<Header> objects) {
120             super(context, 0, objects);
121             mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
122         }
123 
124         @Override
getView(int position, View convertView, ViewGroup parent)125         public View getView(int position, View convertView, ViewGroup parent) {
126             HeaderViewHolder holder;
127             View view;
128 
129             if (convertView == null) {
130                 view = mInflater.inflate(R.layout.dialer_preferences, parent, false);
131                 holder = new HeaderViewHolder();
132                 holder.title = (TextView) view.findViewById(R.id.title);
133                 holder.summary = (TextView) view.findViewById(R.id.summary);
134                 view.setTag(holder);
135             } else {
136                 view = convertView;
137                 holder = (HeaderViewHolder) view.getTag();
138             }
139 
140             // All view fields must be updated every time, because the view may be recycled
141             Header header = getItem(position);
142             holder.title.setText(header.getTitle(getContext().getResources()));
143             CharSequence summary = header.getSummary(getContext().getResources());
144             if (!TextUtils.isEmpty(summary)) {
145                 holder.summary.setVisibility(View.VISIBLE);
146                 holder.summary.setText(summary);
147             } else {
148                 holder.summary.setVisibility(View.GONE);
149             }
150             return view;
151         }
152     }
153 }
154