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