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.Context; 23ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.content.DialogInterface; 24ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.content.res.Resources; 25ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.os.Bundle; 26ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telecom.PhoneAccount; 27ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telecom.PhoneAccountHandle; 28ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telecom.TelecomManager; 29ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telephony.SubscriptionInfo; 30ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.telephony.SubscriptionManager; 319a9c361523c26c7474afdde8de112930f87d3727Santos Cordonimport android.telephony.TelephonyManager; 32ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.KeyEvent; 33ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.LayoutInflater; 34ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.View; 35ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.view.ViewGroup; 36ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.ArrayAdapter; 37ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.ImageView; 38ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.ListAdapter; 39ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport android.widget.TextView; 40b3dd6012863ff3009a7c7690d6ec6a6ce403563fStuart Scottimport android.widget.Toast; 41ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 42ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport com.android.settings.R; 4339b467482d1bf256a111c757e9b7621c6f523271Jason Monk 44ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport java.util.ArrayList; 45ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport java.util.Iterator; 46ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestimport java.util.List; 47ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 48ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWestpublic class SimDialogActivity extends Activity { 49ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private static String TAG = "SimDialogActivity"; 50ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 51ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static String PREFERRED_SIM = "preferred_sim"; 52ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static String DIALOG_TYPE_KEY = "dialog_type"; 53ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int INVALID_PICK = -1; 54ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int DATA_PICK = 0; 55ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int CALLS_PICK = 1; 56ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int SMS_PICK = 2; 57ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public static final int PREFERRED_PICK = 3; 58ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 59ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 60ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest protected void onCreate(Bundle savedInstanceState) { 61ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest super.onCreate(savedInstanceState); 62c2daeaf7e7c954b51827418b0787995805e969e3liurong final int dialogType = getIntent().getIntExtra(DIALOG_TYPE_KEY, INVALID_PICK); 63ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 64ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest switch (dialogType) { 65ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case DATA_PICK: 66ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case CALLS_PICK: 67ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case SMS_PICK: 68ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest createDialog(this, dialogType).show(); 69ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 70ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case PREFERRED_PICK: 71c2daeaf7e7c954b51827418b0787995805e969e3liurong displayPreferredDialog(getIntent().getIntExtra(PREFERRED_SIM, 0)); 72ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 73ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest default: 74ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest throw new IllegalArgumentException("Invalid dialog type " + dialogType + " sent."); 75ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 76ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 77ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 78ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 79ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private void displayPreferredDialog(final int slotId) { 80ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Resources res = getResources(); 81ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Context context = getApplicationContext(); 82f51d00635028c0b87dd431c33c932ad20202d032Stuart Scott final SubscriptionInfo sir = SubscriptionManager.from(context) 83f51d00635028c0b87dd431c33c932ad20202d032Stuart Scott .getActiveSubscriptionInfoForSimSlotIndex(slotId); 84ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 8579d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe if (sir != null) { 8679d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 8779d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe alertDialogBuilder.setTitle(R.string.sim_preferred_title); 8879d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe alertDialogBuilder.setMessage(res.getString( 8979d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe R.string.sim_preferred_message, sir.getDisplayName())); 90ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 9179d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe alertDialogBuilder.setPositiveButton(R.string.yes, new 9279d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe DialogInterface.OnClickListener() { 9379d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe @Override 9479d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe public void onClick(DialogInterface dialog, int id) { 9579d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe final int subId = sir.getSubscriptionId(); 9679d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe PhoneAccountHandle phoneAccountHandle = 9779d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe subscriptionIdToPhoneAccountHandle(subId); 9879d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe setDefaultDataSubId(context, subId); 9979d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe setDefaultSmsSubId(context, subId); 10079d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe setUserSelectedOutgoingPhoneAccount(phoneAccountHandle); 10179d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe finish(); 10279d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe } 10379d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe }); 10479d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe alertDialogBuilder.setNegativeButton(R.string.no, new 10579d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe DialogInterface.OnClickListener() { 10679d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe @Override 10779d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe public void onClick(DialogInterface dialog,int id) { 10879d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe finish(); 10979d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe } 11079d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe }); 111ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 11279d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe alertDialogBuilder.create().show(); 11379d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe } else { 11479d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe finish(); 11579d5da7bf6d0f64ef27a16c6c03a3b2dd622e92fSanket Padawe } 116ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 117ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 118ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private static void setDefaultDataSubId(final Context context, final int subId) { 119ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 120ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest subscriptionManager.setDefaultDataSubId(subId); 121b3dd6012863ff3009a7c7690d6ec6a6ce403563fStuart Scott Toast.makeText(context, R.string.data_switch_started, Toast.LENGTH_LONG).show(); 122ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 123ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 124ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private static void setDefaultSmsSubId(final Context context, final int subId) { 125ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 126ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest subscriptionManager.setDefaultSmsSubId(subId); 127ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 128ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 129ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private void setUserSelectedOutgoingPhoneAccount(PhoneAccountHandle phoneAccount) { 130ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = TelecomManager.from(this); 131ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.setUserSelectedOutgoingPhoneAccount(phoneAccount); 132ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 133ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 134ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private PhoneAccountHandle subscriptionIdToPhoneAccountHandle(final int subId) { 135ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = TelecomManager.from(this); 1369a9c361523c26c7474afdde8de112930f87d3727Santos Cordon final TelephonyManager telephonyManager = TelephonyManager.from(this); 137ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Iterator<PhoneAccountHandle> phoneAccounts = 138ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getCallCapablePhoneAccounts().listIterator(); 139ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 140ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest while (phoneAccounts.hasNext()) { 141ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final PhoneAccountHandle phoneAccountHandle = phoneAccounts.next(); 142ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final PhoneAccount phoneAccount = telecomManager.getPhoneAccount(phoneAccountHandle); 1439a9c361523c26c7474afdde8de112930f87d3727Santos Cordon if (subId == telephonyManager.getSubIdForPhoneAccount(phoneAccount)) { 144ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return phoneAccountHandle; 145ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 146ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 147ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 148ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return null; 149ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 150ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 151ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public Dialog createDialog(final Context context, final int id) { 152ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final ArrayList<String> list = new ArrayList<String>(); 153ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 154ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final List<SubscriptionInfo> subInfoList = 155ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest subscriptionManager.getActiveSubscriptionInfoList(); 156c29c58353679fc5df845bd9d565f7b421c5d9403PauloftheWest final int selectableSubInfoLength = subInfoList == null ? 0 : subInfoList.size(); 157ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 158ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final DialogInterface.OnClickListener selectionListener = 159ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest new DialogInterface.OnClickListener() { 160ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 161ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public void onClick(DialogInterface dialog, int value) { 162ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 163ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionInfo sir; 164ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 165ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest switch (id) { 166ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case DATA_PICK: 167ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest sir = subInfoList.get(value); 168ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setDefaultDataSubId(context, sir.getSubscriptionId()); 169ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 170ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case CALLS_PICK: 171ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = 172ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest TelecomManager.from(context); 173ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final List<PhoneAccountHandle> phoneAccountsList = 174ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getCallCapablePhoneAccounts(); 175ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setUserSelectedOutgoingPhoneAccount( 176ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest value < 1 ? null : phoneAccountsList.get(value - 1)); 177ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 178ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case SMS_PICK: 179ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest sir = subInfoList.get(value); 180ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest setDefaultSmsSubId(context, sir.getSubscriptionId()); 181ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 182ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest default: 183ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest throw new IllegalArgumentException("Invalid dialog type " 184ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest + id + " in SIM dialog."); 185ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 186ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 187ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest finish(); 188ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 189ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest }; 190ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 191ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest Dialog.OnKeyListener keyListener = new Dialog.OnKeyListener() { 192ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 193ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public boolean onKey(DialogInterface arg0, int keyCode, 194ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest KeyEvent event) { 195ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (keyCode == KeyEvent.KEYCODE_BACK) { 196ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest finish(); 197ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 198ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return true; 199ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 200ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest }; 201ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 202a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest ArrayList<SubscriptionInfo> callsSubInfoList = new ArrayList<SubscriptionInfo>(); 203ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (id == CALLS_PICK) { 204ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final TelecomManager telecomManager = TelecomManager.from(context); 2059a9c361523c26c7474afdde8de112930f87d3727Santos Cordon final TelephonyManager telephonyManager = TelephonyManager.from(context); 206ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final Iterator<PhoneAccountHandle> phoneAccounts = 207ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getCallCapablePhoneAccounts().listIterator(); 208ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 209ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest list.add(getResources().getString(R.string.sim_calls_ask_first_prefs_title)); 210a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest callsSubInfoList.add(null); 211ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest while (phoneAccounts.hasNext()) { 212ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final PhoneAccount phoneAccount = 213ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest telecomManager.getPhoneAccount(phoneAccounts.next()); 214ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest list.add((String)phoneAccount.getLabel()); 2159a9c361523c26c7474afdde8de112930f87d3727Santos Cordon int subId = telephonyManager.getSubIdForPhoneAccount(phoneAccount); 2169a9c361523c26c7474afdde8de112930f87d3727Santos Cordon if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { 217f51d00635028c0b87dd431c33c932ad20202d032Stuart Scott final SubscriptionInfo sir = SubscriptionManager.from(context) 218f51d00635028c0b87dd431c33c932ad20202d032Stuart Scott .getActiveSubscriptionInfo(subId); 219a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest callsSubInfoList.add(sir); 220a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest } else { 221a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest callsSubInfoList.add(null); 222a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest } 223ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 224ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } else { 225ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest for (int i = 0; i < selectableSubInfoLength; ++i) { 226ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final SubscriptionInfo sir = subInfoList.get(i); 227ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest CharSequence displayName = sir.getDisplayName(); 228ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (displayName == null) { 229ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest displayName = ""; 230ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 231ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest list.add(displayName.toString()); 232ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 233ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 234ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 235ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest String[] arr = list.toArray(new String[0]); 236ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 237ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest AlertDialog.Builder builder = new AlertDialog.Builder(context); 238ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 239ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest ListAdapter adapter = new SelectAccountListAdapter( 240a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest id == CALLS_PICK ? callsSubInfoList : subInfoList, 241ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.getContext(), 242ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest R.layout.select_account_list_item, 243ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest arr, id); 244ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 245ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest switch (id) { 246ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case DATA_PICK: 247ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.setTitle(R.string.select_sim_for_data); 248ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 249ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case CALLS_PICK: 250ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.setTitle(R.string.select_sim_for_calls); 251ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 252ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest case SMS_PICK: 253ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest builder.setTitle(R.string.sim_card_select_title); 254ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest break; 255ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest default: 256ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest throw new IllegalArgumentException("Invalid dialog type " 257ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest + id + " in SIM dialog."); 258ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 259ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 260ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest Dialog dialog = builder.setAdapter(adapter, selectionListener).create(); 261ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest dialog.setOnKeyListener(keyListener); 262ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 26375e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 26475e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe @Override 26575e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe public void onCancel(DialogInterface dialogInterface) { 26675e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe finish(); 26775e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe } 26875e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe }); 26975e0082ae8984e7d5f518bb9732a6bfa58dabdeaSanket Padawe 270ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return dialog; 271ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 272ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 273ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 274ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private class SelectAccountListAdapter extends ArrayAdapter<String> { 275ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private Context mContext; 276ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private int mResId; 277ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private int mDialogId; 278ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private final float OPACITY = 0.54f; 279ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private List<SubscriptionInfo> mSubInfoList; 280ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 281ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public SelectAccountListAdapter(List<SubscriptionInfo> subInfoList, 282ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest Context context, int resource, String[] arr, int dialogId) { 283ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest super(context, resource, arr); 284ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mContext = context; 285ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mResId = resource; 286ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mDialogId = dialogId; 287ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mSubInfoList = subInfoList; 288ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 289ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 290ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest @Override 291ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest public View getView(int position, View convertView, ViewGroup parent) { 292ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest LayoutInflater inflater = (LayoutInflater) 293ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 294ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest View rowView; 295ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest final ViewHolder holder; 296ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 297ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest if (convertView == null) { 298ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest // Cache views for faster scrolling 299ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest rowView = inflater.inflate(mResId, null); 300ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder = new ViewHolder(); 301ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.title = (TextView) rowView.findViewById(R.id.title); 302ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.summary = (TextView) rowView.findViewById(R.id.summary); 303ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon = (ImageView) rowView.findViewById(R.id.icon); 304ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest rowView.setTag(holder); 305ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } else { 306ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest rowView = convertView; 307ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder = (ViewHolder) rowView.getTag(); 308ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 309ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 310a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest final SubscriptionInfo sir = mSubInfoList.get(position); 311a886d69f9d69dc380872a3fa0ac63b21195cb570PauloftheWest if (sir == null) { 312ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.title.setText(getItem(position)); 313ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.summary.setText(""); 314ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon.setImageDrawable(getResources() 315ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest .getDrawable(R.drawable.ic_live_help)); 316ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon.setAlpha(OPACITY); 317ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } else { 318ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.title.setText(sir.getDisplayName()); 319ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.summary.setText(sir.getNumber()); 320ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest holder.icon.setImageBitmap(sir.createIconBitmap(mContext)); 321ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 322ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest return rowView; 323ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 324ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest 325ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest private class ViewHolder { 326ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest TextView title; 327ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest TextView summary; 328ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest ImageView icon; 329ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 330ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest } 331ffef98b3a0742319f40982ade420586bb7d603e5PauloftheWest} 332