Home | History | Annotate | Download | only in settings
      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
     38     protected void onCreate(Bundle savedInstanceState) {
     39         super.onCreate(savedInstanceState);
     40         mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
     41     }
     42 
     43     @Override
     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
     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
     86     protected boolean isValidFragment(String fragmentName) {
     87         return true;
     88     }
     89 
     90     @Override
     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      */
    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 
    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
    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