Home | History | Annotate | Download | only in sim
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.settings.sim;
     17 
     18 import android.app.Activity;
     19 import android.app.AlertDialog;
     20 import android.content.Context;
     21 import android.content.DialogInterface;
     22 import android.content.res.Resources;
     23 import android.graphics.Paint;
     24 import android.graphics.drawable.ShapeDrawable;
     25 import android.graphics.drawable.shapes.OvalShape;
     26 import android.os.Bundle;
     27 import android.telephony.PhoneNumberUtils;
     28 import android.telephony.SubscriptionInfo;
     29 import android.telephony.SubscriptionManager;
     30 import android.telephony.TelephonyManager;
     31 import android.text.TextUtils;
     32 import android.view.LayoutInflater;
     33 import android.view.View;
     34 import android.view.ViewGroup;
     35 import android.widget.AdapterView;
     36 import android.widget.ArrayAdapter;
     37 import android.widget.EditText;
     38 import android.widget.ImageView;
     39 import android.widget.Spinner;
     40 import android.widget.TextView;
     41 
     42 import com.android.settings.R;
     43 import com.android.settings.Utils;
     44 
     45 public class SimPreferenceDialog extends Activity {
     46 
     47     private Context mContext;
     48     private SubscriptionInfo mSubInfoRecord;
     49     private int mSlotId;
     50     private int[] mTintArr;
     51     private String[] mColorStrings;
     52     private int mTintSelectorPos;
     53     private SubscriptionManager mSubscriptionManager;
     54     AlertDialog.Builder mBuilder;
     55     View mDialogLayout;
     56     private final String SIM_NAME = "sim_name";
     57     private final String TINT_POS = "tint_pos";
     58 
     59     @Override
     60     public void onCreate(Bundle bundle) {
     61         super.onCreate(bundle);
     62         mContext = this;
     63         final Bundle extras = getIntent().getExtras();
     64         mSlotId = extras.getInt(SimSettings.EXTRA_SLOT_ID, -1);
     65         mSubscriptionManager = SubscriptionManager.from(mContext);
     66         mSubInfoRecord = mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(mSlotId);
     67         mTintArr = mContext.getResources().getIntArray(com.android.internal.R.array.sim_colors);
     68         mColorStrings = mContext.getResources().getStringArray(R.array.color_picker);
     69         mTintSelectorPos = 0;
     70 
     71         mBuilder = new AlertDialog.Builder(mContext);
     72         LayoutInflater inflater = (LayoutInflater)mContext
     73                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     74         mDialogLayout = inflater.inflate(R.layout.multi_sim_dialog, null);
     75         mBuilder.setView(mDialogLayout);
     76 
     77         createEditDialog(bundle);
     78     }
     79 
     80     @Override
     81     public void onSaveInstanceState(Bundle savedInstanceState) {
     82         savedInstanceState.putInt(TINT_POS, mTintSelectorPos);
     83 
     84         final EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
     85         savedInstanceState.putString(SIM_NAME, nameText.getText().toString());
     86 
     87         super.onSaveInstanceState(savedInstanceState);
     88 
     89     }
     90 
     91     @Override
     92     public void onRestoreInstanceState(Bundle savedInstanceState) {
     93         super.onRestoreInstanceState(savedInstanceState);
     94 
     95         int pos = savedInstanceState.getInt(TINT_POS);
     96         final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner);
     97         tintSpinner.setSelection(pos);
     98         mTintSelectorPos = pos;
     99 
    100         EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
    101         nameText.setText(savedInstanceState.getString(SIM_NAME));
    102         Utils.setEditTextCursorPosition(nameText);
    103     }
    104 
    105     private void createEditDialog(Bundle bundle) {
    106         final Resources res = mContext.getResources();
    107         EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
    108         nameText.setText(mSubInfoRecord.getDisplayName());
    109         Utils.setEditTextCursorPosition(nameText);
    110         final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner);
    111         SelectColorAdapter adapter = new SelectColorAdapter(mContext,
    112                 R.layout.settings_color_picker_item, mColorStrings);
    113         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    114         tintSpinner.setAdapter(adapter);
    115 
    116         for (int i = 0; i < mTintArr.length; i++) {
    117             if (mTintArr[i] == mSubInfoRecord.getIconTint()) {
    118                 tintSpinner.setSelection(i);
    119                 mTintSelectorPos = i;
    120                 break;
    121             }
    122         }
    123 
    124         tintSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    125             @Override
    126             public void onItemSelected(AdapterView<?> parent, View view,
    127                                        int pos, long id){
    128                 tintSpinner.setSelection(pos);
    129                 mTintSelectorPos = pos;
    130             }
    131 
    132             @Override
    133             public void onNothingSelected(AdapterView<?> parent) {
    134             }
    135         });
    136 
    137         final TelephonyManager tm = (TelephonyManager) mContext.getSystemService(
    138                 Context.TELEPHONY_SERVICE);
    139         TextView numberView = (TextView)mDialogLayout.findViewById(R.id.number);
    140         final String rawNumber =  tm.getLine1Number(mSubInfoRecord.getSubscriptionId());
    141         if (TextUtils.isEmpty(rawNumber)) {
    142             numberView.setText(res.getString(com.android.internal.R.string.unknownName));
    143         } else {
    144             numberView.setText(PhoneNumberUtils.formatNumber(rawNumber));
    145         }
    146 
    147         String simCarrierName = tm.getSimOperatorName(mSubInfoRecord.getSubscriptionId());
    148         TextView carrierView = (TextView)mDialogLayout.findViewById(R.id.carrier);
    149         carrierView.setText(!TextUtils.isEmpty(simCarrierName) ? simCarrierName :
    150                 mContext.getString(com.android.internal.R.string.unknownName));
    151 
    152         mBuilder.setTitle(String.format(res.getString(R.string.sim_editor_title),
    153                 (mSubInfoRecord.getSimSlotIndex() + 1)));
    154 
    155         mBuilder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
    156             @Override
    157             public void onClick(DialogInterface dialog, int whichButton) {
    158                 final EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
    159                 Utils.setEditTextCursorPosition(nameText);
    160                 String displayName = nameText.getText().toString();
    161                 int subId = mSubInfoRecord.getSubscriptionId();
    162                 mSubInfoRecord.setDisplayName(displayName);
    163                 mSubscriptionManager.setDisplayName(displayName, subId,
    164                         SubscriptionManager.NAME_SOURCE_USER_INPUT);
    165 
    166                 final int tintSelected = tintSpinner.getSelectedItemPosition();
    167                 int subscriptionId = mSubInfoRecord.getSubscriptionId();
    168                 int tint = mTintArr[tintSelected];
    169                 mSubInfoRecord.setIconTint(tint);
    170                 mSubscriptionManager.setIconTint(tint, subscriptionId);
    171                 dialog.dismiss();
    172             }
    173         });
    174 
    175         mBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
    176             @Override
    177             public void onClick(DialogInterface dialog, int whichButton) {
    178                 dialog.dismiss();
    179             }
    180         });
    181 
    182         mBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() {
    183            @Override
    184            public void onDismiss(DialogInterface dialogInListener) {
    185                finish();
    186            }
    187         });
    188 
    189         mBuilder.create().show();
    190     }
    191 
    192     private class SelectColorAdapter extends ArrayAdapter<CharSequence> {
    193         private Context mContext;
    194         private int mResId;
    195 
    196         public SelectColorAdapter(
    197                 Context context, int resource, String[] arr) {
    198             super(context, resource, arr);
    199             mContext = context;
    200             mResId = resource;
    201         }
    202 
    203         @Override
    204         public View getView(int position, View convertView, ViewGroup parent) {
    205             LayoutInflater inflater = (LayoutInflater)
    206                     mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    207 
    208             View rowView;
    209             final ViewHolder holder;
    210             Resources res = mContext.getResources();
    211             int iconSize = res.getDimensionPixelSize(R.dimen.color_swatch_size);
    212             int strokeWidth = res.getDimensionPixelSize(R.dimen.color_swatch_stroke_width);
    213 
    214             if (convertView == null) {
    215                 // Cache views for faster scrolling
    216                 rowView = inflater.inflate(mResId, null);
    217                 holder = new ViewHolder();
    218                 ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
    219                 drawable.setIntrinsicHeight(iconSize);
    220                 drawable.setIntrinsicWidth(iconSize);
    221                 drawable.getPaint().setStrokeWidth(strokeWidth);
    222                 holder.label = (TextView) rowView.findViewById(R.id.color_text);
    223                 holder.icon = (ImageView) rowView.findViewById(R.id.color_icon);
    224                 holder.swatch = drawable;
    225                 rowView.setTag(holder);
    226             } else {
    227                 rowView = convertView;
    228                 holder = (ViewHolder) rowView.getTag();
    229             }
    230 
    231             holder.label.setText(getItem(position));
    232             holder.swatch.getPaint().setColor(mTintArr[position]);
    233             holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
    234             holder.icon.setVisibility(View.VISIBLE);
    235             holder.icon.setImageDrawable(holder.swatch);
    236             return rowView;
    237         }
    238 
    239         @Override
    240         public View getDropDownView(int position, View convertView, ViewGroup parent) {
    241             View rowView = getView(position, convertView, parent);
    242             final ViewHolder holder = (ViewHolder) rowView.getTag();
    243 
    244             if (mTintSelectorPos == position) {
    245                 holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
    246             } else {
    247                 holder.swatch.getPaint().setStyle(Paint.Style.STROKE);
    248             }
    249             holder.icon.setVisibility(View.VISIBLE);
    250             return rowView;
    251         }
    252 
    253         private class ViewHolder {
    254             TextView label;
    255             ImageView icon;
    256             ShapeDrawable swatch;
    257         }
    258     }
    259 }
    260