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