SimDialogActivity.java revision 75e0082ae8984e7d5f518bb9732a6bfa58dabdea
1ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest/* 2ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * Copyright (C) 2014 The Android Open Source Project 3ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * 4ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * Licensed under the Apache License, Version 2.0 (the "License"); 5ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * you may not use this file except in compliance with the License. 6ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * You may obtain a copy of the License at 7ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * 8ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * http://www.apache.org/licenses/LICENSE-2.0 9ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * 10ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * Unless required by applicable law or agreed to in writing, software 11ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * distributed under the License is distributed on an "AS IS" BASIS, 12ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * See the License for the specific language governing permissions and 14ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest * limitations under the License. 15ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest */ 16ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 17ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestpackage com.android.settings.sim; 18ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 19ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.app.Activity; 20ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.app.AlertDialog; 21ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.app.Dialog; 22ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.content.ComponentName; 23ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.content.Context; 24ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.content.DialogInterface; 25ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.content.res.Resources; 26ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.os.Bundle; 27ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telecom.PhoneAccount; 28ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telecom.PhoneAccountHandle; 29ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telecom.TelecomManager; 30ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telephony.SubscriptionInfo; 31ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telephony.SubscriptionManager; 32ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.text.TextUtils; 33ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.util.Log; 34ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.KeyEvent; 35ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.LayoutInflater; 36ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.View; 37ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.ViewGroup; 38ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.ArrayAdapter; 39ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.ImageView; 40ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.ListAdapter; 41ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.TextView; 42ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 43ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport com.android.settings.R; 44ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport com.android.settings.Utils; 45ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport com.android.internal.telephony.Phone; 46ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport com.android.internal.telephony.PhoneFactory; 47ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 48ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport java.util.ArrayList; 49ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport java.util.Iterator; 50ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport java.util.List; 51ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 52ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestpublic class SimDialogActivity extends Activity { 53ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private static String TAG = "SimDialogActivity"; 54ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 55ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static String PREFERRED_SIM = "preferred_sim"; 56ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static String DIALOG_TYPE_KEY = "dialog_type"; 57ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int INVALID_PICK = -1; 58ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int DATA_PICK = 0; 59ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int CALLS_PICK = 1; 60ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int SMS_PICK = 2; 61ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int PREFERRED_PICK = 3; 62ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 63ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 64ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest protected void onCreate(Bundle savedInstanceState) { 65ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest super.onCreate(savedInstanceState); 66ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Bundle extras = getIntent().getExtras(); 67ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final int dialogType = extras.getInt(DIALOG_TYPE_KEY, INVALID_PICK); 68ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 69ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest switch (dialogType) { 70ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case DATA_PICK: 71ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case CALLS_PICK: 72ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case SMS_PICK: 73ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest createDialog(this, dialogType).show(); 74ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 75ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case PREFERRED_PICK: 76ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest displayPreferredDialog(extras.getInt(PREFERRED_SIM)); 77ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 78ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest default: 79ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest throw new IllegalArgumentException("Invalid dialog type " + dialogType + " sent."); 80ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 81ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 82ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 83ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 84ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private void displayPreferredDialog(final int slotId) { 85ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Resources res = getResources(); 86ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Context context = getApplicationContext(); 87ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionInfo sir = Utils.findRecordBySlotId(context, slotId); 88ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 89ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 90ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest alertDialogBuilder.setTitle(R.string.sim_preferred_title); 91ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest alertDialogBuilder.setMessage(res.getString( 92ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest R.string.sim_preferred_message, sir.getDisplayName())); 93ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 94ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest alertDialogBuilder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 95ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 96ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public void onClick(DialogInterface dialog, int id) { 97ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final int subId = sir.getSubscriptionId(); 98ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest PhoneAccountHandle phoneAccountHandle = subscriptionIdToPhoneAccountHandle(subId); 99ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setDefaultDataSubId(context, subId); 100ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setDefaultSmsSubId(context, subId); 101ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setUserSelectedOutgoingPhoneAccount(phoneAccountHandle); 102ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest finish(); 103ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 104ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest }); 105ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest alertDialogBuilder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 106ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 107ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public void onClick(DialogInterface dialog,int id) { 108ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest finish(); 109ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 110ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest }); 111ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 112ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest alertDialogBuilder.create().show(); 113ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 114ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 115ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private static void setDefaultDataSubId(final Context context, final int subId) { 116ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 117ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest subscriptionManager.setDefaultDataSubId(subId); 118ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 119ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 120ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private static void setDefaultSmsSubId(final Context context, final int subId) { 121ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 122ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest subscriptionManager.setDefaultSmsSubId(subId); 123ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 124ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 125ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private void setUserSelectedOutgoingPhoneAccount(PhoneAccountHandle phoneAccount) { 126ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = TelecomManager.from(this); 127ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.setUserSelectedOutgoingPhoneAccount(phoneAccount); 128ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 129ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 130ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private PhoneAccountHandle subscriptionIdToPhoneAccountHandle(final int subId) { 131ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = TelecomManager.from(this); 132ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Iterator<PhoneAccountHandle> phoneAccounts = 133ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getCallCapablePhoneAccounts().listIterator(); 134ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 135ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest while (phoneAccounts.hasNext()) { 136ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final PhoneAccountHandle phoneAccountHandle = phoneAccounts.next(); 137ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final PhoneAccount phoneAccount = telecomManager.getPhoneAccount(phoneAccountHandle); 138ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final String phoneAccountId = phoneAccountHandle.getId(); 139ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 140ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION) 141ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest && TextUtils.isDigitsOnly(phoneAccountId) 142ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest && Integer.parseInt(phoneAccountId) == subId){ 143ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return phoneAccountHandle; 144ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 145ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 146ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 147ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return null; 148ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 149ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 150ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public Dialog createDialog(final Context context, final int id) { 151ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final ArrayList<String> list = new ArrayList<String>(); 152ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 153ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final List<SubscriptionInfo> subInfoList = 154ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest subscriptionManager.getActiveSubscriptionInfoList(); 155c29c58353679fc5df845bd9d565f7b421c5d9403PauloftheWest final int selectableSubInfoLength = subInfoList == null ? 0 : subInfoList.size(); 156ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 157ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final DialogInterface.OnClickListener selectionListener = 158ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest new DialogInterface.OnClickListener() { 159ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 160ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public void onClick(DialogInterface dialog, int value) { 161ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 162ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionInfo sir; 163ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 164ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest switch (id) { 165ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case DATA_PICK: 166ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest sir = subInfoList.get(value); 167ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setDefaultDataSubId(context, sir.getSubscriptionId()); 168ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 169ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case CALLS_PICK: 170ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = 171ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest TelecomManager.from(context); 172ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final List<PhoneAccountHandle> phoneAccountsList = 173ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getCallCapablePhoneAccounts(); 174ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setUserSelectedOutgoingPhoneAccount( 175ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest value < 1 ? null : phoneAccountsList.get(value - 1)); 176ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 177ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case SMS_PICK: 178ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest sir = subInfoList.get(value); 179ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setDefaultSmsSubId(context, sir.getSubscriptionId()); 180ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 181ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest default: 182ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest throw new IllegalArgumentException("Invalid dialog type " 183ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest + id + " in SIM dialog."); 184ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 185ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 186ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest finish(); 187ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 188ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest }; 189ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 190ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest Dialog.OnKeyListener keyListener = new Dialog.OnKeyListener() { 191ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 192ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public boolean onKey(DialogInterface arg0, int keyCode, 193ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest KeyEvent event) { 194ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (keyCode == KeyEvent.KEYCODE_BACK) { 195ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest finish(); 196ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 197ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return true; 198ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 199ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest }; 200ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 201ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (id == CALLS_PICK) { 202ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = TelecomManager.from(context); 203ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Iterator<PhoneAccountHandle> phoneAccounts = 204ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getCallCapablePhoneAccounts().listIterator(); 205ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 206ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest list.add(getResources().getString(R.string.sim_calls_ask_first_prefs_title)); 207ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest while (phoneAccounts.hasNext()) { 208ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final PhoneAccount phoneAccount = 209ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getPhoneAccount(phoneAccounts.next()); 210ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest list.add((String)phoneAccount.getLabel()); 211ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 212ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } else { 213ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest for (int i = 0; i < selectableSubInfoLength; ++i) { 214ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionInfo sir = subInfoList.get(i); 215ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest CharSequence displayName = sir.getDisplayName(); 216ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (displayName == null) { 217ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest displayName = ""; 218ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 219ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest list.add(displayName.toString()); 220ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 221ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 222ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 223ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest String[] arr = list.toArray(new String[0]); 224ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 225ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest AlertDialog.Builder builder = new AlertDialog.Builder(context); 226ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 227ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest ListAdapter adapter = new SelectAccountListAdapter( 228ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest subInfoList, 229ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.getContext(), 230ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest R.layout.select_account_list_item, 231ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest arr, id); 232ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 233ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest switch (id) { 234ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case DATA_PICK: 235ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.setTitle(R.string.select_sim_for_data); 236ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 237ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case CALLS_PICK: 238ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.setTitle(R.string.select_sim_for_calls); 239ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 240ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case SMS_PICK: 241ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.setTitle(R.string.sim_card_select_title); 242ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 243ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest default: 244ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest throw new IllegalArgumentException("Invalid dialog type " 245ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest + id + " in SIM dialog."); 246ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 247ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 248ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest Dialog dialog = builder.setAdapter(adapter, selectionListener).create(); 249ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest dialog.setOnKeyListener(keyListener); 250ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 25175e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 25275e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe @Override 25375e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe public void onCancel(DialogInterface dialogInterface) { 25475e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe finish(); 25575e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe } 25675e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe }); 25775e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe 258ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return dialog; 259ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 260ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 261ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 262ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private class SelectAccountListAdapter extends ArrayAdapter<String> { 263ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private Context mContext; 264ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private int mResId; 265ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private int mDialogId; 266ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private final float OPACITY = 0.54f; 267ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private List<SubscriptionInfo> mSubInfoList; 268ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 269ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public SelectAccountListAdapter(List<SubscriptionInfo> subInfoList, 270ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest Context context, int resource, String[] arr, int dialogId) { 271ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest super(context, resource, arr); 272ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mContext = context; 273ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mResId = resource; 274ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mDialogId = dialogId; 275ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mSubInfoList = subInfoList; 276ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 277ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 278ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 279ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public View getView(int position, View convertView, ViewGroup parent) { 280ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest LayoutInflater inflater = (LayoutInflater) 281ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 282ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest View rowView; 283ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final ViewHolder holder; 284ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest SubscriptionInfo sir; 285ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 286ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (convertView == null) { 287ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest // Cache views for faster scrolling 288ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest rowView = inflater.inflate(mResId, null); 289ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder = new ViewHolder(); 290ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.title = (TextView) rowView.findViewById(R.id.title); 291ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.summary = (TextView) rowView.findViewById(R.id.summary); 292ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon = (ImageView) rowView.findViewById(R.id.icon); 293ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest rowView.setTag(holder); 294ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } else { 295ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest rowView = convertView; 296ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder = (ViewHolder) rowView.getTag(); 297ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 298ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 299ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (mDialogId == CALLS_PICK) { 300ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.title.setText(getItem(position)); 301ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.summary.setText(""); 302ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon.setImageDrawable(getResources() 303ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest .getDrawable(R.drawable.ic_live_help)); 304ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon.setAlpha(OPACITY); 305ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } else { 306ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest sir = mSubInfoList.get(position); 307ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.title.setText(sir.getDisplayName()); 308ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.summary.setText(sir.getNumber()); 309ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon.setImageBitmap(sir.createIconBitmap(mContext)); 310ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 311ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return rowView; 312ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 313ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 314ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private class ViewHolder { 315ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest TextView title; 316ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest TextView summary; 317ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest ImageView icon; 318ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 319ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 320ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest} 321