| /* | |
| * Copyright (C) 2015 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package com.android.settings.sim; | |
| import android.app.Activity; | |
| import android.app.AlertDialog; | |
| import android.content.Context; | |
| import android.content.DialogInterface; | |
| import android.content.res.Resources; | |
| import android.graphics.Paint; | |
| import android.graphics.drawable.ShapeDrawable; | |
| import android.graphics.drawable.shapes.OvalShape; | |
| import android.os.Bundle; | |
| import android.telephony.PhoneNumberUtils; | |
| import android.telephony.SubscriptionInfo; | |
| import android.telephony.SubscriptionManager; | |
| import android.telephony.TelephonyManager; | |
| import android.text.TextUtils; | |
| import android.view.LayoutInflater; | |
| import android.view.View; | |
| import android.view.ViewGroup; | |
| import android.widget.AdapterView; | |
| import android.widget.ArrayAdapter; | |
| import android.widget.EditText; | |
| import android.widget.ImageView; | |
| import android.widget.Spinner; | |
| import android.widget.TextView; | |
| import com.android.settings.R; | |
| public class SimPreferenceDialog extends Activity { | |
| private Context mContext; | |
| private SubscriptionInfo mSubInfoRecord; | |
| private int mSlotId; | |
| private int[] mTintArr; | |
| private String[] mColorStrings; | |
| private int mTintSelectorPos; | |
| private SubscriptionManager mSubscriptionManager; | |
| AlertDialog.Builder mBuilder; | |
| View mDialogLayout; | |
| private final String SIM_NAME = "sim_name"; | |
| private final String TINT_POS = "tint_pos"; | |
| @Override | |
| public void onCreate(Bundle bundle) { | |
| super.onCreate(bundle); | |
| mContext = this; | |
| final Bundle extras = getIntent().getExtras(); | |
| mSlotId = extras.getInt(SimSettings.EXTRA_SLOT_ID, -1); | |
| mSubscriptionManager = SubscriptionManager.from(mContext); | |
| mSubInfoRecord = mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(mSlotId); | |
| mTintArr = mContext.getResources().getIntArray(com.android.internal.R.array.sim_colors); | |
| mColorStrings = mContext.getResources().getStringArray(R.array.color_picker); | |
| mTintSelectorPos = 0; | |
| mBuilder = new AlertDialog.Builder(mContext); | |
| LayoutInflater inflater = (LayoutInflater)mContext | |
| .getSystemService(Context.LAYOUT_INFLATER_SERVICE); | |
| mDialogLayout = inflater.inflate(R.layout.multi_sim_dialog, null); | |
| mBuilder.setView(mDialogLayout); | |
| createEditDialog(bundle); | |
| } | |
| @Override | |
| public void onSaveInstanceState(Bundle savedInstanceState) { | |
| savedInstanceState.putInt(TINT_POS, mTintSelectorPos); | |
| final EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name); | |
| savedInstanceState.putString(SIM_NAME, nameText.getText().toString()); | |
| super.onSaveInstanceState(savedInstanceState); | |
| } | |
| @Override | |
| public void onRestoreInstanceState(Bundle savedInstanceState) { | |
| super.onRestoreInstanceState(savedInstanceState); | |
| int pos = savedInstanceState.getInt(TINT_POS); | |
| final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner); | |
| tintSpinner.setSelection(pos); | |
| mTintSelectorPos = pos; | |
| EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name); | |
| nameText.setText(savedInstanceState.getString(SIM_NAME)); | |
| } | |
| private void createEditDialog(Bundle bundle) { | |
| final Resources res = mContext.getResources(); | |
| EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name); | |
| nameText.setText(mSubInfoRecord.getDisplayName()); | |
| final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner); | |
| SelectColorAdapter adapter = new SelectColorAdapter(mContext, | |
| R.layout.settings_color_picker_item, mColorStrings); | |
| adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); | |
| tintSpinner.setAdapter(adapter); | |
| for (int i = 0; i < mTintArr.length; i++) { | |
| if (mTintArr[i] == mSubInfoRecord.getIconTint()) { | |
| tintSpinner.setSelection(i); | |
| mTintSelectorPos = i; | |
| break; | |
| } | |
| } | |
| tintSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { | |
| @Override | |
| public void onItemSelected(AdapterView<?> parent, View view, | |
| int pos, long id){ | |
| tintSpinner.setSelection(pos); | |
| mTintSelectorPos = pos; | |
| } | |
| @Override | |
| public void onNothingSelected(AdapterView<?> parent) { | |
| } | |
| }); | |
| final TelephonyManager tm = (TelephonyManager) mContext.getSystemService( | |
| Context.TELEPHONY_SERVICE); | |
| TextView numberView = (TextView)mDialogLayout.findViewById(R.id.number); | |
| final String rawNumber = tm.getLine1Number(mSubInfoRecord.getSubscriptionId()); | |
| if (TextUtils.isEmpty(rawNumber)) { | |
| numberView.setText(res.getString(com.android.internal.R.string.unknownName)); | |
| } else { | |
| numberView.setText(PhoneNumberUtils.formatNumber(rawNumber)); | |
| } | |
| String simCarrierName = tm.getSimOperatorName(mSubInfoRecord.getSubscriptionId()); | |
| TextView carrierView = (TextView)mDialogLayout.findViewById(R.id.carrier); | |
| carrierView.setText(!TextUtils.isEmpty(simCarrierName) ? simCarrierName : | |
| mContext.getString(com.android.internal.R.string.unknownName)); | |
| mBuilder.setTitle(String.format(res.getString(R.string.sim_editor_title), | |
| (mSubInfoRecord.getSimSlotIndex() + 1))); | |
| mBuilder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() { | |
| @Override | |
| public void onClick(DialogInterface dialog, int whichButton) { | |
| final EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name); | |
| String displayName = nameText.getText().toString(); | |
| int subId = mSubInfoRecord.getSubscriptionId(); | |
| mSubInfoRecord.setDisplayName(displayName); | |
| mSubscriptionManager.setDisplayName(displayName, subId, | |
| SubscriptionManager.NAME_SOURCE_USER_INPUT); | |
| final int tintSelected = tintSpinner.getSelectedItemPosition(); | |
| int subscriptionId = mSubInfoRecord.getSubscriptionId(); | |
| int tint = mTintArr[tintSelected]; | |
| mSubInfoRecord.setIconTint(tint); | |
| mSubscriptionManager.setIconTint(tint, subscriptionId); | |
| dialog.dismiss(); | |
| finish(); | |
| } | |
| }); | |
| mBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { | |
| @Override | |
| public void onClick(DialogInterface dialog, int whichButton) { | |
| dialog.dismiss(); | |
| finish(); | |
| } | |
| }); | |
| mBuilder.create().show(); | |
| } | |
| private class SelectColorAdapter extends ArrayAdapter<CharSequence> { | |
| private Context mContext; | |
| private int mResId; | |
| public SelectColorAdapter( | |
| Context context, int resource, String[] arr) { | |
| super(context, resource, arr); | |
| mContext = context; | |
| mResId = resource; | |
| } | |
| @Override | |
| public View getView(int position, View convertView, ViewGroup parent) { | |
| LayoutInflater inflater = (LayoutInflater) | |
| mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); | |
| View rowView; | |
| final ViewHolder holder; | |
| Resources res = mContext.getResources(); | |
| int iconSize = res.getDimensionPixelSize(R.dimen.color_swatch_size); | |
| int strokeWidth = res.getDimensionPixelSize(R.dimen.color_swatch_stroke_width); | |
| if (convertView == null) { | |
| // Cache views for faster scrolling | |
| rowView = inflater.inflate(mResId, null); | |
| holder = new ViewHolder(); | |
| ShapeDrawable drawable = new ShapeDrawable(new OvalShape()); | |
| drawable.setIntrinsicHeight(iconSize); | |
| drawable.setIntrinsicWidth(iconSize); | |
| drawable.getPaint().setStrokeWidth(strokeWidth); | |
| holder.label = (TextView) rowView.findViewById(R.id.color_text); | |
| holder.icon = (ImageView) rowView.findViewById(R.id.color_icon); | |
| holder.swatch = drawable; | |
| rowView.setTag(holder); | |
| } else { | |
| rowView = convertView; | |
| holder = (ViewHolder) rowView.getTag(); | |
| } | |
| holder.label.setText(getItem(position)); | |
| holder.swatch.getPaint().setColor(mTintArr[position]); | |
| holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE); | |
| holder.icon.setVisibility(View.VISIBLE); | |
| holder.icon.setImageDrawable(holder.swatch); | |
| return rowView; | |
| } | |
| @Override | |
| public View getDropDownView(int position, View convertView, ViewGroup parent) { | |
| View rowView = getView(position, convertView, parent); | |
| final ViewHolder holder = (ViewHolder) rowView.getTag(); | |
| if (mTintSelectorPos == position) { | |
| holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE); | |
| } else { | |
| holder.swatch.getPaint().setStyle(Paint.Style.STROKE); | |
| } | |
| holder.icon.setVisibility(View.VISIBLE); | |
| return rowView; | |
| } | |
| private class ViewHolder { | |
| TextView label; | |
| ImageView icon; | |
| ShapeDrawable swatch; | |
| } | |
| } | |
| } |