1ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leepackage com.android.phone.settings;
2ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
3ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.content.ActivityNotFoundException;
4ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.content.Intent;
5ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.net.sip.SipManager;
6ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.os.Bundle;
7ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.preference.CheckBoxPreference;
8ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.preference.ListPreference;
9ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.preference.Preference;
10ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.preference.PreferenceFragment;
11ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.telecom.PhoneAccountHandle;
12ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.telecom.TelecomManager;
13ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport android.util.Log;
14ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
15ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport com.android.phone.R;
164d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Leeimport com.android.services.telephony.sip.SipAccountRegistry;
17ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport com.android.services.telephony.sip.SipSharedPreferences;
18ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport com.android.services.telephony.sip.SipUtil;
19ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
20ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leeimport java.util.List;
21ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
22ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Leepublic class PhoneAccountSettingsFragment extends PreferenceFragment
23ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        implements Preference.OnPreferenceChangeListener,
24ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                Preference.OnPreferenceClickListener,
25ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                AccountSelectionPreference.AccountSelectionListener {
26ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
27ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private static final Intent CONNECTION_SERVICE_CONFIGURE_INTENT =
28ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            new Intent(TelecomManager.ACTION_CONNECTION_SERVICE_CONFIGURE)
29ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    .addCategory(Intent.CATEGORY_DEFAULT);
30ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
31ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private static final String DEFAULT_OUTGOING_ACCOUNT_KEY = "default_outgoing_account";
32ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
33ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private static final String CONFIGURE_CALL_ASSISTANT_PREF_KEY =
34ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            "wifi_calling_configure_call_assistant_preference";
35ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private static final String CALL_ASSISTANT_CATEGORY_PREF_KEY =
36ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            "phone_accounts_call_assistant_settings_category_key";
37ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private static final String SELECT_CALL_ASSISTANT_PREF_KEY =
38ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            "wifi_calling_call_assistant_preference";
39ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
401e58e41b50b337ba00605b9a56f4fa49cacb1708Nancy Chen    private static final String SIP_SETTINGS_CATEGORY_PREF_KEY =
411e58e41b50b337ba00605b9a56f4fa49cacb1708Nancy Chen            "phone_accounts_sip_settings_category_key";
42ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private static final String USE_SIP_PREF_KEY = "use_sip_calling_options_key";
434d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee    private static final String SIP_RECEIVE_CALLS_PREF_KEY = "sip_receive_calls_key";
44ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
45ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private String LOG_TAG = PhoneAccountSettingsFragment.class.getSimpleName();
46ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
47ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private TelecomManager mTelecomManager;
48ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
49ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private AccountSelectionPreference mDefaultOutgoingAccount;
50ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private AccountSelectionPreference mSelectCallAssistant;
51ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private Preference mConfigureCallAssistant;
52ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
53ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private ListPreference mUseSipCalling;
544d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee    private CheckBoxPreference mSipReceiveCallsPreference;
55ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private SipSharedPreferences mSipSharedPreferences;
56ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
57ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    @Override
58ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public void onCreate(Bundle icicle) {
59ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        super.onCreate(icicle);
60ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
61ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        mTelecomManager = TelecomManager.from(getActivity());
62ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
63ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
64ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    @Override
65ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public void onResume() {
66ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        super.onResume();
67ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
68ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (getPreferenceScreen() != null) {
69ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            getPreferenceScreen().removeAll();
70ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
71ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
72ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        addPreferencesFromResource(com.android.phone.R.xml.phone_account_settings);
73ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
7439f4a2538f7cbbb13035dc2901edffa62dcc8336Andrew Lee        mDefaultOutgoingAccount = (AccountSelectionPreference)
7539f4a2538f7cbbb13035dc2901edffa62dcc8336Andrew Lee                getPreferenceScreen().findPreference(DEFAULT_OUTGOING_ACCOUNT_KEY);
76ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (mTelecomManager.getAllPhoneAccountsCount() > 1) {
77ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mDefaultOutgoingAccount.setListener(this);
78ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            updateDefaultOutgoingAccountsModel();
79ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        } else {
80ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            getPreferenceScreen().removePreference(mDefaultOutgoingAccount);
81ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
82ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
83ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (!mTelecomManager.getSimCallManagers().isEmpty()) {
84ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mSelectCallAssistant = (AccountSelectionPreference)
85ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    getPreferenceScreen().findPreference(SELECT_CALL_ASSISTANT_PREF_KEY);
86ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mSelectCallAssistant.setListener(this);
87ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mSelectCallAssistant.setDialogTitle(
88ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    R.string.wifi_calling_select_call_assistant_summary);
89ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
90ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mConfigureCallAssistant =
91ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    getPreferenceScreen().findPreference(CONFIGURE_CALL_ASSISTANT_PREF_KEY);
92ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mConfigureCallAssistant.setOnPreferenceClickListener(this);
93ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            updateCallAssistantModel();
94ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        } else {
95ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            getPreferenceScreen().removePreference(
96ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    getPreferenceScreen().findPreference(CALL_ASSISTANT_CATEGORY_PREF_KEY));
97ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
98ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
99ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (SipUtil.isVoipSupported(getActivity())) {
100ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mSipSharedPreferences = new SipSharedPreferences(getActivity());
101ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
102ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mUseSipCalling = (ListPreference)
103ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    getPreferenceScreen().findPreference(USE_SIP_PREF_KEY);
104ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mUseSipCalling.setEntries(!SipManager.isSipWifiOnly(getActivity())
105ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    ? R.array.sip_call_options_wifi_only_entries
106ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    : R.array.sip_call_options_entries);
107ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mUseSipCalling.setOnPreferenceChangeListener(this);
108829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee
109829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee            int optionsValueIndex =
110829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee                    mUseSipCalling.findIndexOfValue(mSipSharedPreferences.getSipCallOption());
111829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee            if (optionsValueIndex == -1) {
112829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee                // If the option is invalid (eg. deprecated value), default to SIP_ADDRESS_ONLY.
113829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee                mSipSharedPreferences.setSipCallOption(
114829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee                        getResources().getString(R.string.sip_address_only));
115829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee                optionsValueIndex =
116829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee                        mUseSipCalling.findIndexOfValue(mSipSharedPreferences.getSipCallOption());
117829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee            }
118829e46ecc3fa122b6c5f29d2771a62e89eedd1a7Andrew Lee            mUseSipCalling.setValueIndex(optionsValueIndex);
119ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mUseSipCalling.setSummary(mUseSipCalling.getEntry());
1204d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee
1214d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            mSipReceiveCallsPreference = (CheckBoxPreference)
1224d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee                    getPreferenceScreen().findPreference(SIP_RECEIVE_CALLS_PREF_KEY);
1234d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            mSipReceiveCallsPreference.setEnabled(SipUtil.isPhoneIdle(getActivity()));
1244d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            mSipReceiveCallsPreference.setChecked(
1254d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee                    mSipSharedPreferences.isReceivingCallsEnabled());
1264d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            mSipReceiveCallsPreference.setOnPreferenceChangeListener(this);
127ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        } else {
128ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            getPreferenceScreen().removePreference(
129ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    getPreferenceScreen().findPreference(SIP_SETTINGS_CATEGORY_PREF_KEY));
130ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
131ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
132ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
133ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    /**
1344d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee     * Handles changes to the preferences.
135ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     *
136ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * @param pref The preference changed.
137ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * @param objValue The changed value.
138ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * @return True if the preference change has been handled, and false otherwise.
139ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     */
140ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    @Override
141ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public boolean onPreferenceChange(Preference pref, Object objValue) {
142ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (pref == mUseSipCalling) {
143ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            String option = objValue.toString();
144ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mSipSharedPreferences.setSipCallOption(option);
145ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mUseSipCalling.setValueIndex(mUseSipCalling.findIndexOfValue(option));
146ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mUseSipCalling.setSummary(mUseSipCalling.getEntry());
147ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            return true;
1484d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee        } else if (pref == mSipReceiveCallsPreference) {
1494d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            final boolean isEnabled = !mSipReceiveCallsPreference.isChecked();
1504d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            new Thread(new Runnable() {
1514d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee                public void run() {
1524d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee                    handleSipReceiveCallsOption(isEnabled);
1534d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee                }
1544d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            }).start();
1554d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee            return true;
156ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
157ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        return false;
158ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
159ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
160ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    @Override
161ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public boolean onPreferenceClick(Preference pref) {
162ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (pref == mConfigureCallAssistant) {
163ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            try {
164ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                startActivity(CONNECTION_SERVICE_CONFIGURE_INTENT);
165ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            } catch (ActivityNotFoundException e) {
166ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                Log.d(LOG_TAG, "Could not resolve telecom connection service configure intent.");
167ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            }
168ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            return true;
169ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
170ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        return false;
171ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
172ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
173ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    /**
174ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * Handles a phone account selection, namely when a call assistant has been selected.
175ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     *
176ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * @param pref The account selection preference which triggered the account selected event.
177ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * @param account The account selected.
178ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * @return True if the account selection has been handled, and false otherwise.
179ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     */
180ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    @Override
181ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public boolean onAccountSelected(AccountSelectionPreference pref, PhoneAccountHandle account) {
182ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (pref == mDefaultOutgoingAccount) {
183ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mTelecomManager.setUserSelectedOutgoingPhoneAccount(account);
184ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            return true;
185ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        } else if (pref == mSelectCallAssistant) {
186ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mTelecomManager.setSimCallManager(account);
187ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            return true;
188ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
189ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        return false;
190ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
191ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
192ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    /**
193ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * Repopulate the dialog to pick up changes before showing.
194ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     *
195ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * @param pref The account selection preference dialog being shown.
196ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     */
197ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    @Override
198ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public void onAccountSelectionDialogShow(AccountSelectionPreference pref) {
199ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (pref == mDefaultOutgoingAccount) {
200ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            updateDefaultOutgoingAccountsModel();
201ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        } else if (pref == mSelectCallAssistant) {
202ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            updateCallAssistantModel();
203ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
204ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
205ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
206ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    /**
207ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * Update the configure preference summary when the call assistant changes.
208ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     */
209ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    @Override
210ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public void onAccountChanged(AccountSelectionPreference pref) {
211ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (pref == mSelectCallAssistant) {
212ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            updateConfigureCallAssistantSummary();
213ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
214ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
215ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
2164d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee    private synchronized void handleSipReceiveCallsOption(boolean isEnabled) {
2174d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee        mSipSharedPreferences.setReceivingCallsEnabled(isEnabled);
2184d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee
2194d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee        SipUtil.useSipToReceiveIncomingCalls(getActivity(), isEnabled);
2204d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee
2214d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee        // Restart all Sip services to ensure we reflect whether we are receiving calls.
2224d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee        SipAccountRegistry sipAccountRegistry = SipAccountRegistry.getInstance();
2234d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee        sipAccountRegistry.restartSipService(getActivity());
2244d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee    }
2254d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee
226ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    /**
227ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * Queries the telcomm manager to update the default outgoing account selection preference
228ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * with the list of outgoing accounts and the current default outgoing account.
229ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     */
230ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private void updateDefaultOutgoingAccountsModel() {
231ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        mDefaultOutgoingAccount.setModel(
232ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                mTelecomManager,
233ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                mTelecomManager.getCallCapablePhoneAccounts(),
234ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                mTelecomManager.getUserSelectedOutgoingPhoneAccount(),
235ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                getString(R.string.phone_accounts_ask_every_time));
236ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
237ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
238ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    /**
239ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * Queries the telecomm manager to update the account selection preference with the list of
240ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * call assistants, and the currently selected call assistant.
241ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     */
242ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    public void updateCallAssistantModel() {
243ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        List<PhoneAccountHandle> simCallManagers = mTelecomManager.getSimCallManagers();
244ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        mSelectCallAssistant.setModel(
245ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                mTelecomManager,
246ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                simCallManagers,
247ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                mTelecomManager.getSimCallManager(),
2484d37f5279f2896d16ec3d4e10ec4dcba63e86c3cAndrew Lee                getString(R.string.wifi_calling_call_assistant_none));
249ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
250ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        updateConfigureCallAssistantSummary();
251ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
252ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee
253ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    /**
254ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * Updates the summary on the "configure call assistant" preference. If it is the last entry,
255ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * show the summary for when no call assistant is selected. Otherwise, display the currently
256ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     * selected call assistant.
257ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee     */
258ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    private void updateConfigureCallAssistantSummary() {
259ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        if (mSelectCallAssistant.getEntries().length - 1
260ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                == mSelectCallAssistant.findIndexOfValue(mSelectCallAssistant.getValue())) {
261ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mConfigureCallAssistant.setSummary(
262ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee                    R.string.wifi_calling_call_assistant_configure_no_selection);
263ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mConfigureCallAssistant.setEnabled(false);
264ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        } else {
265ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mConfigureCallAssistant.setSummary(null);
266ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee            mConfigureCallAssistant.setEnabled(true);
267ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee        }
268ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee    }
269ce8ae2af29acbf5cfa9509b0770615e317ff03a0Andrew Lee}
270