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