• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
onCreate(Bundle bundle)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
onSaveInstanceState(Bundle savedInstanceState)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
onRestoreInstanceState(Bundle savedInstanceState)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 
createEditDialog(Bundle bundle)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 
SelectColorAdapter( Context context, int resource, String[] arr)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
getView(int position, View convertView, ViewGroup parent)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
getDropDownView(int position, View convertView, ViewGroup parent)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