• 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 
44 public class SimPreferenceDialog extends Activity {
45 
46     private Context mContext;
47     private SubscriptionInfo mSubInfoRecord;
48     private int mSlotId;
49     private int[] mTintArr;
50     private String[] mColorStrings;
51     private int mTintSelectorPos;
52     private SubscriptionManager mSubscriptionManager;
53     AlertDialog.Builder mBuilder;
54     View mDialogLayout;
55     private final String SIM_NAME = "sim_name";
56     private final String TINT_POS = "tint_pos";
57 
58     @Override
onCreate(Bundle bundle)59     public void onCreate(Bundle bundle) {
60         super.onCreate(bundle);
61         mContext = this;
62         final Bundle extras = getIntent().getExtras();
63         mSlotId = extras.getInt(SimSettings.EXTRA_SLOT_ID, -1);
64         mSubscriptionManager = SubscriptionManager.from(mContext);
65         mSubInfoRecord = mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(mSlotId);
66         mTintArr = mContext.getResources().getIntArray(com.android.internal.R.array.sim_colors);
67         mColorStrings = mContext.getResources().getStringArray(R.array.color_picker);
68         mTintSelectorPos = 0;
69 
70         mBuilder = new AlertDialog.Builder(mContext);
71         LayoutInflater inflater = (LayoutInflater)mContext
72                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
73         mDialogLayout = inflater.inflate(R.layout.multi_sim_dialog, null);
74         mBuilder.setView(mDialogLayout);
75 
76         createEditDialog(bundle);
77     }
78 
79     @Override
onSaveInstanceState(Bundle savedInstanceState)80     public void onSaveInstanceState(Bundle savedInstanceState) {
81         savedInstanceState.putInt(TINT_POS, mTintSelectorPos);
82 
83         final EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
84         savedInstanceState.putString(SIM_NAME, nameText.getText().toString());
85 
86         super.onSaveInstanceState(savedInstanceState);
87 
88     }
89 
90     @Override
onRestoreInstanceState(Bundle savedInstanceState)91     public void onRestoreInstanceState(Bundle savedInstanceState) {
92         super.onRestoreInstanceState(savedInstanceState);
93 
94         int pos = savedInstanceState.getInt(TINT_POS);
95         final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner);
96         tintSpinner.setSelection(pos);
97         mTintSelectorPos = pos;
98 
99         EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
100         nameText.setText(savedInstanceState.getString(SIM_NAME));
101     }
102 
createEditDialog(Bundle bundle)103     private void createEditDialog(Bundle bundle) {
104         final Resources res = mContext.getResources();
105         EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
106         nameText.setText(mSubInfoRecord.getDisplayName());
107 
108         final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner);
109         SelectColorAdapter adapter = new SelectColorAdapter(mContext,
110                 R.layout.settings_color_picker_item, mColorStrings);
111         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
112         tintSpinner.setAdapter(adapter);
113 
114         for (int i = 0; i < mTintArr.length; i++) {
115             if (mTintArr[i] == mSubInfoRecord.getIconTint()) {
116                 tintSpinner.setSelection(i);
117                 mTintSelectorPos = i;
118                 break;
119             }
120         }
121 
122         tintSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
123             @Override
124             public void onItemSelected(AdapterView<?> parent, View view,
125                                        int pos, long id){
126                 tintSpinner.setSelection(pos);
127                 mTintSelectorPos = pos;
128             }
129 
130             @Override
131             public void onNothingSelected(AdapterView<?> parent) {
132             }
133         });
134 
135         final TelephonyManager tm = (TelephonyManager) mContext.getSystemService(
136                 Context.TELEPHONY_SERVICE);
137         TextView numberView = (TextView)mDialogLayout.findViewById(R.id.number);
138         final String rawNumber =  tm.getLine1NumberForSubscriber(
139                 mSubInfoRecord.getSubscriptionId());
140         if (TextUtils.isEmpty(rawNumber)) {
141             numberView.setText(res.getString(com.android.internal.R.string.unknownName));
142         } else {
143             numberView.setText(PhoneNumberUtils.formatNumber(rawNumber));
144         }
145 
146         String simCarrierName = tm.getSimOperatorNameForSubscription(mSubInfoRecord
147                 .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 
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                 finish();
173             }
174         });
175 
176         mBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
177             @Override
178             public void onClick(DialogInterface dialog, int whichButton) {
179                 dialog.dismiss();
180                 finish();
181             }
182         });
183 
184         mBuilder.create().show();
185     }
186 
187     private class SelectColorAdapter extends ArrayAdapter<CharSequence> {
188         private Context mContext;
189         private int mResId;
190 
SelectColorAdapter( Context context, int resource, String[] arr)191         public SelectColorAdapter(
192                 Context context, int resource, String[] arr) {
193             super(context, resource, arr);
194             mContext = context;
195             mResId = resource;
196         }
197 
198         @Override
getView(int position, View convertView, ViewGroup parent)199         public View getView(int position, View convertView, ViewGroup parent) {
200             LayoutInflater inflater = (LayoutInflater)
201                     mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
202 
203             View rowView;
204             final ViewHolder holder;
205             Resources res = mContext.getResources();
206             int iconSize = res.getDimensionPixelSize(R.dimen.color_swatch_size);
207             int strokeWidth = res.getDimensionPixelSize(R.dimen.color_swatch_stroke_width);
208 
209             if (convertView == null) {
210                 // Cache views for faster scrolling
211                 rowView = inflater.inflate(mResId, null);
212                 holder = new ViewHolder();
213                 ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
214                 drawable.setIntrinsicHeight(iconSize);
215                 drawable.setIntrinsicWidth(iconSize);
216                 drawable.getPaint().setStrokeWidth(strokeWidth);
217                 holder.label = (TextView) rowView.findViewById(R.id.color_text);
218                 holder.icon = (ImageView) rowView.findViewById(R.id.color_icon);
219                 holder.swatch = drawable;
220                 rowView.setTag(holder);
221             } else {
222                 rowView = convertView;
223                 holder = (ViewHolder) rowView.getTag();
224             }
225 
226             holder.label.setText(getItem(position));
227             holder.swatch.getPaint().setColor(mTintArr[position]);
228             holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
229             holder.icon.setVisibility(View.VISIBLE);
230             holder.icon.setImageDrawable(holder.swatch);
231             return rowView;
232         }
233 
234         @Override
getDropDownView(int position, View convertView, ViewGroup parent)235         public View getDropDownView(int position, View convertView, ViewGroup parent) {
236             View rowView = getView(position, convertView, parent);
237             final ViewHolder holder = (ViewHolder) rowView.getTag();
238 
239             if (mTintSelectorPos == position) {
240                 holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
241             } else {
242                 holder.swatch.getPaint().setStyle(Paint.Style.STROKE);
243             }
244             holder.icon.setVisibility(View.VISIBLE);
245             return rowView;
246         }
247 
248         private class ViewHolder {
249             TextView label;
250             ImageView icon;
251             ShapeDrawable swatch;
252         }
253     }
254 }
255