SipSettings.java revision 788959e2d798da2d8a34cf89779421966d200f3d
17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/* 27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Copyright (C) 2010 The Android Open Source Project 37d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 47d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 57d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * you may not use this file except in compliance with the License. 67d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * You may obtain a copy of the License at 77d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 87d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * http://www.apache.org/licenses/LICENSE-2.0 97d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Unless required by applicable law or agreed to in writing, software 117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * See the License for the specific language governing permissions and 147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * limitations under the License. 157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 17788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepalpackage com.android.services.telephony.sip; 187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.CallManager; 207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.Phone; 217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.PhoneConstants; 227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.ActionBar; 247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.AlertDialog; 257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Context; 267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.DialogInterface; 277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Intent; 287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.pm.ApplicationInfo; 297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.pm.PackageManager; 307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.sip.SipErrorCode; 317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.sip.SipException; 327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.sip.SipManager; 337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.sip.SipProfile; 347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.sip.SipRegistrationListener; 357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Bundle; 367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Parcelable; 377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Process; 387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.CheckBoxPreference; 397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.Preference; 407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.Preference.OnPreferenceClickListener; 417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.PreferenceActivity; 427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.PreferenceCategory; 437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.TextUtils; 447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log; 457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.Menu; 467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.MenuItem; 477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport java.io.IOException; 497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport java.util.Collections; 507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport java.util.Comparator; 517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport java.util.LinkedHashMap; 527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport java.util.List; 537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport java.util.Map; 547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/** 567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * The PreferenceActivity class for managing sip profile preferences. 577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpublic class SipSettings extends PreferenceActivity { 59788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal private static final String PREFIX = "[SipSettings] "; 60788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal private static final boolean VERBOSE = true; /* STOP SHIP if true */ 61788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal 627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public static final String SIP_SHARED_PREFERENCES = "SIP_PREFERENCES"; 637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int MENU_ADD_ACCOUNT = Menu.FIRST; 657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon static final String KEY_SIP_PROFILE = "sip_profile"; 677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String BUTTON_SIP_RECEIVE_CALLS = 697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon "sip_receive_calls_key"; 707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String PREF_SIP_LIST = "sip_account_list"; 717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int REQUEST_ADD_OR_EDIT_SIP_PROFILE = 1; 737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private PackageManager mPackageManager; 757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private SipManager mSipManager; 767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CallManager mCallManager; 777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private SipProfileDb mProfileDb; 787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private SipProfile mProfile; // profile that's being edited 807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CheckBoxPreference mButtonSipReceiveCalls; 827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private PreferenceCategory mSipListContainer; 837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private Map<String, SipPreference> mSipPreferenceMap; 847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private List<SipProfile> mSipProfileList; 857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private SipSharedPreferences mSipSharedPreferences; 867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private int mUid = Process.myUid(); 877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private class SipPreference extends Preference { 897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipProfile mProfile; 907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipPreference(Context c, SipProfile p) { 917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super(c); 927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setProfile(p); 937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipProfile getProfile() { 967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return mProfile; 977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon void setProfile(SipProfile p) { 1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mProfile = p; 1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setTitle(getProfileName(p)); 1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon updateSummary(mSipSharedPreferences.isReceivingCallsEnabled() 1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ? getString(R.string.registration_status_checking_status) 1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon : getString(R.string.registration_status_not_receiving)); 1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon void updateSummary(String registrationStatus) { 1087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int profileUid = mProfile.getCallingUid(); 1097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon boolean isPrimary = mProfile.getUriString().equals( 1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipSharedPreferences.getPrimaryAccount()); 111788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal if (VERBOSE) { 112788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("SipPreference.updateSummary, profile uid: " + profileUid + 113788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal " isPrimary: " + isPrimary + 114788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal " registration: " + registrationStatus + 115788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal " Primary: " + mSipSharedPreferences.getPrimaryAccount() + 116788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal " status: " + registrationStatus); 117788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal } 1187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String summary = ""; 1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if ((profileUid > 0) && (profileUid != mUid)) { 1207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // from third party apps 1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon summary = getString(R.string.third_party_account_summary, 1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon getPackageNameFromUid(profileUid)); 1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else if (isPrimary) { 1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon summary = getString(R.string.primary_account_summary_with, 1257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon registrationStatus); 1267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon summary = registrationStatus; 1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setSummary(summary); 1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String getPackageNameFromUid(int uid) { 1347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 1357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String[] pkgs = mPackageManager.getPackagesForUid(uid); 136788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal ApplicationInfo ai = mPackageManager.getApplicationInfo(pkgs[0], 0); 1377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return ai.loadLabel(mPackageManager).toString(); 1387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (PackageManager.NameNotFoundException e) { 139788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("getPackageNameFromUid, cannot find name of uid: " + uid + ", exception: " + e); 1407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return "uid:" + uid; 1427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onCreate(Bundle savedInstanceState) { 1467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onCreate(savedInstanceState); 1477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipManager = SipManager.newInstance(this); 1497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipSharedPreferences = new SipSharedPreferences(this); 1507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mProfileDb = new SipProfileDb(this); 1517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPackageManager = getPackageManager(); 1537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setContentView(R.layout.sip_settings_ui); 1547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon addPreferencesFromResource(R.xml.sip_setting); 1557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipListContainer = (PreferenceCategory) findPreference(PREF_SIP_LIST); 1567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon registerForReceiveCallsCheckBox(); 1577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mCallManager = CallManager.getInstance(); 1587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon updateProfilesStatus(); 1607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ActionBar actionBar = getActionBar(); 1627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (actionBar != null) { 1637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon actionBar.setDisplayHomeAsUpEnabled(true); 1647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onResume() { 1697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onResume(); 1707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mCallManager.getState() != PhoneConstants.State.IDLE) { 1727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonSipReceiveCalls.setEnabled(false); 1737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonSipReceiveCalls.setEnabled(true); 1757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onDestroy() { 1807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onDestroy(); 1817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon unregisterForContextMenu(getListView()); 1827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onActivityResult(final int requestCode, final int resultCode, 1867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final Intent intent) { 1877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (resultCode != RESULT_OK && resultCode != RESULT_FIRST_USER) return; 1887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new Thread() { 1897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void run() { 1917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 1927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mProfile != null) { 193788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal if (VERBOSE) log("onActivityResult, remove: " + mProfile.getProfileName()); 1947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon deleteProfile(mProfile); 1957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipProfile profile = intent.getParcelableExtra(KEY_SIP_PROFILE); 1987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (resultCode == RESULT_OK) { 199788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal if (VERBOSE) log("onActivityResult, new: " + profile.getProfileName()); 2007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon addProfile(profile); 2017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon updateProfilesStatus(); 2037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (IOException e) { 204788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("onActivityResult, can not handle the profile: " + e); 2057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }.start(); 2087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void registerForReceiveCallsCheckBox() { 2117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonSipReceiveCalls = (CheckBoxPreference) findPreference 2127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon (BUTTON_SIP_RECEIVE_CALLS); 2137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonSipReceiveCalls.setChecked( 2147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipSharedPreferences.isReceivingCallsEnabled()); 2157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonSipReceiveCalls.setOnPreferenceClickListener( 2167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new OnPreferenceClickListener() { 2177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onPreferenceClick(Preference preference) { 218788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal final boolean enabled = ((CheckBoxPreference) preference).isChecked(); 2197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new Thread(new Runnable() { 2207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void run() { 2217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleSipReceiveCallsOption(enabled); 2227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }).start(); 2247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 2257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }); 2277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private synchronized void handleSipReceiveCallsOption(boolean enabled) { 2307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipSharedPreferences.setReceivingCallsEnabled(enabled); 2317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon List<SipProfile> sipProfileList = mProfileDb.retrieveSipProfileList(); 2327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon for (SipProfile p : sipProfileList) { 2337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String sipUri = p.getUriString(); 2347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon p = updateAutoRegistrationFlag(p, enabled); 2357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 2367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (enabled) { 237788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal mSipManager.open(p, SipUtil.createIncomingCallPendingIntent(this), null); 2387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 2397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipManager.close(sipUri); 2407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mSipSharedPreferences.isPrimaryAccount(sipUri)) { 2417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // re-open in order to make calls 2427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipManager.open(p); 2437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (Exception e) { 246788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("handleSipReceiveCallsOption, register failed: " + e); 2477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon updateProfilesStatus(); 2507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private SipProfile updateAutoRegistrationFlag( 2537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipProfile p, boolean enabled) { 2547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipProfile newProfile = new SipProfile.Builder(p) 2557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setAutoRegistration(enabled) 2567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .build(); 2577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 2587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mProfileDb.deleteProfile(p); 2597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mProfileDb.saveProfile(newProfile); 2607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (Exception e) { 261788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("updateAutoRegistrationFlag, exception: " + e); 2627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return newProfile; 2647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void updateProfilesStatus() { 2677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new Thread(new Runnable() { 2687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 2697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void run() { 2707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 2717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon retrieveSipLists(); 2727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (Exception e) { 273788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("updateProfilesStatus, exception: " + e); 2747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }).start(); 2777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String getProfileName(SipProfile profile) { 2807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String profileName = profile.getProfileName(); 2817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (TextUtils.isEmpty(profileName)) { 2827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon profileName = profile.getUserName() + "@" + profile.getSipDomain(); 2837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return profileName; 2857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void retrieveSipLists() { 2887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipPreferenceMap = new LinkedHashMap<String, SipPreference>(); 2897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipProfileList = mProfileDb.retrieveSipProfileList(); 2907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon processActiveProfilesFromSipService(); 2917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Collections.sort(mSipProfileList, new Comparator<SipProfile>() { 2927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 2937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public int compare(SipProfile p1, SipProfile p2) { 2947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return getProfileName(p1).compareTo(getProfileName(p2)); 2957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 2967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 2977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean equals(SipProfile p) { 2987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // not used 2997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return false; 3007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }); 3027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipListContainer.removeAll(); 3037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon for (SipProfile p : mSipProfileList) { 3047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon addPreferenceFor(p); 3057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!mSipSharedPreferences.isReceivingCallsEnabled()) return; 3087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon for (SipProfile p : mSipProfileList) { 3097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mUid == p.getCallingUid()) { 3107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 3117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipManager.setRegistrationListener( 3127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon p.getUriString(), createRegistrationListener()); 3137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (SipException e) { 314788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("retrieveSipLists, cannot set registration listener: " + e); 3157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void processActiveProfilesFromSipService() { 3217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipProfile[] activeList = mSipManager.getListOfProfiles(); 3227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon for (SipProfile activeProfile : activeList) { 3237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipProfile profile = getProfileFromList(activeProfile); 3247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (profile == null) { 3257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipProfileList.add(activeProfile); 3267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 3277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon profile.setCallingUid(activeProfile.getCallingUid()); 3287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private SipProfile getProfileFromList(SipProfile activeProfile) { 3337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon for (SipProfile p : mSipProfileList) { 3347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (p.getUriString().equals(activeProfile.getUriString())) { 3357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return p; 3367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return null; 3397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void addPreferenceFor(SipProfile p) { 3427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String status; 343788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal if (VERBOSE) log("addPreferenceFor, profile uri: " + p.getUri()); 3447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipPreference pref = new SipPreference(this, p); 3457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipPreferenceMap.put(p.getUriString(), pref); 3467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipListContainer.addPreference(pref); 3477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon pref.setOnPreferenceClickListener( 3497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new Preference.OnPreferenceClickListener() { 3507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 3517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onPreferenceClick(Preference pref) { 3527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleProfileClick(((SipPreference) pref).mProfile); 3537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 3547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }); 3567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void handleProfileClick(final SipProfile profile) { 3597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int uid = profile.getCallingUid(); 3607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (uid == mUid || uid == 0) { 3617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon startSipEditor(profile); 3627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 3637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new AlertDialog.Builder(this) 3657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setTitle(R.string.alert_dialog_close) 3667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setIconAttribute(android.R.attr.alertDialogIcon) 3677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setPositiveButton(R.string.close_profile, 3687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new DialogInterface.OnClickListener() { 3697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 3707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onClick(DialogInterface dialog, int w) { 3717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon deleteProfile(profile); 3727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon unregisterProfile(profile); 3737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }) 3757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setNegativeButton(android.R.string.cancel, null) 3767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .show(); 3777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void unregisterProfile(final SipProfile p) { 3807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // run it on background thread for better UI response 3817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new Thread(new Runnable() { 3827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 3837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void run() { 3847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 3857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipManager.close(p.getUriString()); 3867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (Exception e) { 387788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("unregisterProfile, unregister failed, SipService died? Exception: " + e); 3887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }, "unregisterProfile").start(); 3917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon void deleteProfile(SipProfile p) { 3947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipProfileList.remove(p); 3957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipPreference pref = mSipPreferenceMap.remove(p.getUriString()); 3967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipListContainer.removePreference(pref); 3977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 3987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 3997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void addProfile(SipProfile p) throws IOException { 4007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 4017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipManager.setRegistrationListener(p.getUriString(), 4027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon createRegistrationListener()); 4037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } catch (Exception e) { 404788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal log("addProfile, cannot set registration listener: " + e); 4057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mSipProfileList.add(p); 4077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon addPreferenceFor(p); 4087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void startSipEditor(final SipProfile profile) { 4117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mProfile = profile; 4127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Intent intent = new Intent(this, SipEditor.class); 4137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon intent.putExtra(KEY_SIP_PROFILE, (Parcelable) profile); 4147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon startActivityForResult(intent, REQUEST_ADD_OR_EDIT_SIP_PROFILE); 4157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void showRegistrationMessage(final String profileUri, 4187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final String message) { 4197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon runOnUiThread(new Runnable() { 4207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void run() { 4227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon SipPreference pref = mSipPreferenceMap.get(profileUri); 4237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (pref != null) { 4247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon pref.updateSummary(message); 4257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }); 4287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private SipRegistrationListener createRegistrationListener() { 4317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return new SipRegistrationListener() { 4327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onRegistrationDone(String profileUri, long expiryTime) { 4347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_done)); 4367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onRegistering(String profileUri) { 4407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_registering)); 4427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onRegistrationFailed(String profileUri, int errorCode, 4467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon String message) { 4477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch (errorCode) { 4487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case SipErrorCode.IN_PROGRESS: 4497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_still_trying)); 4517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 4527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case SipErrorCode.INVALID_CREDENTIALS: 4537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_invalid_credentials)); 4557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 4567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case SipErrorCode.SERVER_UNREACHABLE: 4577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_server_unreachable)); 4597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 4607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case SipErrorCode.DATA_CONNECTION_LOST: 4617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (SipManager.isSipWifiOnly(getApplicationContext())){ 4627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_no_wifi_data)); 4647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 4657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_no_data)); 4677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 4697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case SipErrorCode.CLIENT_ERROR: 4707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_not_running)); 4727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 4737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon default: 4747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showRegistrationMessage(profileUri, getString( 4757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.registration_status_failed_try_later, 4767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon message)); 4777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }; 4807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onCreateOptionsMenu(Menu menu) { 4847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onCreateOptionsMenu(menu); 4857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon menu.add(0, MENU_ADD_ACCOUNT, 0, R.string.add_sip_account) 4867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 4877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 4887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onPrepareOptionsMenu(Menu menu) { 4927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon menu.findItem(MENU_ADD_ACCOUNT).setEnabled( 4937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mCallManager.getState() == PhoneConstants.State.IDLE); 4947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return super.onPrepareOptionsMenu(menu); 4957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 4967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 4977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 4987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onOptionsItemSelected(MenuItem item) { 4997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final int itemId = item.getItemId(); 5007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch (itemId) { 5017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case MENU_ADD_ACCOUNT: { 5027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon startSipEditor(null); 5037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 5047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 5057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 5067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return super.onOptionsItemSelected(item); 5077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 508788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal 509788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal private static void log(String msg) { 510788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal Log.d(SipUtil.LOG_TAG, PREFIX + msg); 511788959e2d798da2d8a34cf89779421966d200f3dSailesh Nepal } 5127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon} 513