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