12587d9c6437b680911e252efecc73788e876de76Chung-yih Wang/** 22587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * Copyright (C) 2010 The Android Open Source Project 32587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * 42587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License"); 52587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * you may not use this file except in compliance with the License. 62587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * You may obtain a copy of the License at 72587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * 82587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * http://www.apache.org/licenses/LICENSE-2.0 92587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * 102587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * Unless required by applicable law or agreed to in writing, software 112587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS, 122587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * See the License for the specific language governing permissions and 142587d9c6437b680911e252efecc73788e876de76Chung-yih Wang * limitations under the License. 152587d9c6437b680911e252efecc73788e876de76Chung-yih Wang */ 162587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 172587d9c6437b680911e252efecc73788e876de76Chung-yih Wangpackage com.android.phone; 182587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 1926f26634f535c87a82965c3fde8af16fbe8a1822Hung-ying Tyanimport com.android.internal.telephony.CallManager; 2026f26634f535c87a82965c3fde8af16fbe8a1822Hung-ying Tyanimport com.android.internal.telephony.Phone; 2126f26634f535c87a82965c3fde8af16fbe8a1822Hung-ying Tyanimport com.android.internal.telephony.PhoneFactory; 227e4022a85e51589b409de8fd0e9d2b17e3b4a4f7Hung-ying Tyanimport com.android.phone.sip.SipProfileDb; 2326f26634f535c87a82965c3fde8af16fbe8a1822Hung-ying Tyanimport com.android.phone.sip.SipSettings; 2426f26634f535c87a82965c3fde8af16fbe8a1822Hung-ying Tyanimport com.android.phone.sip.SipSharedPreferences; 2526f26634f535c87a82965c3fde8af16fbe8a1822Hung-ying Tyan 262587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.app.Activity; 272587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.app.AlertDialog; 282587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.app.Dialog; 29f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wangimport android.content.Context; 302587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.content.DialogInterface; 312587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.content.Intent; 32122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wangimport android.net.ConnectivityManager; 33122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wangimport android.net.NetworkInfo; 3475e3711d82d0c98444f6c438437cad41d862fca6David Brownimport android.net.Uri; 3526f26634f535c87a82965c3fde8af16fbe8a1822Hung-ying Tyanimport android.net.sip.SipException; 362587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.net.sip.SipManager; 372587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.net.sip.SipProfile; 382587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.os.Bundle; 3975e3711d82d0c98444f6c438437cad41d862fca6David Brownimport android.os.SystemProperties; 402587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.provider.Settings; 412587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.telephony.PhoneNumberUtils; 422587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.util.Log; 43f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wangimport android.view.LayoutInflater; 442587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport android.view.View; 4531c051e8b44e84e9c25317de4eed3e03d2a5e926Hung-ying Tyanimport android.view.WindowManager; 46f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wangimport android.widget.CheckBox; 47f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wangimport android.widget.CompoundButton; 48f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wangimport android.widget.TextView; 492587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 502587d9c6437b680911e252efecc73788e876de76Chung-yih Wangimport java.util.List; 512587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 522587d9c6437b680911e252efecc73788e876de76Chung-yih Wang/** 5375e3711d82d0c98444f6c438437cad41d862fca6David Brown * Activity that selects the proper phone type for an outgoing call. 5475e3711d82d0c98444f6c438437cad41d862fca6David Brown * 5575e3711d82d0c98444f6c438437cad41d862fca6David Brown * This activity determines which Phone type (SIP or PSTN) should be used 5675e3711d82d0c98444f6c438437cad41d862fca6David Brown * for an outgoing phone call, depending on the outgoing "number" (which 5775e3711d82d0c98444f6c438437cad41d862fca6David Brown * may be either a PSTN number or a SIP address) as well as the user's SIP 5875e3711d82d0c98444f6c438437cad41d862fca6David Brown * preferences. In some cases this activity has no interaction with the 5975e3711d82d0c98444f6c438437cad41d862fca6David Brown * user, but in other cases it may (by bringing up a dialog if the user's 6075e3711d82d0c98444f6c438437cad41d862fca6David Brown * preference is "Ask for each call".) 61f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang */ 62aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyanpublic class SipCallOptionHandler extends Activity implements 63f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang DialogInterface.OnClickListener, DialogInterface.OnCancelListener, 64f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang CompoundButton.OnCheckedChangeListener { 652587d9c6437b680911e252efecc73788e876de76Chung-yih Wang static final String TAG = "SipCallOptionHandler"; 6675e3711d82d0c98444f6c438437cad41d862fca6David Brown private static final boolean DBG = 6775e3711d82d0c98444f6c438437cad41d862fca6David Brown (PhoneApp.DBG_LEVEL >= 1) && (SystemProperties.getInt("ro.debuggable", 0) == 1); 6875e3711d82d0c98444f6c438437cad41d862fca6David Brown 692587d9c6437b680911e252efecc73788e876de76Chung-yih Wang static final int DIALOG_SELECT_PHONE_TYPE = 0; 702587d9c6437b680911e252efecc73788e876de76Chung-yih Wang static final int DIALOG_SELECT_OUTGOING_SIP_PHONE = 1; 712587d9c6437b680911e252efecc73788e876de76Chung-yih Wang static final int DIALOG_START_SIP_SETTINGS = 2; 72122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang static final int DIALOG_NO_INTERNET_ERROR = 3; 73b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan static final int DIALOG_NO_VOIP = 4; 74b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan static final int DIALOG_SIZE = 5; 752587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 762587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private Intent mIntent; 772587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private List<SipProfile> mProfileList; 782587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private String mCallOption; 792587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private String mNumber; 802587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private SipSharedPreferences mSipSharedPreferences; 81e67c35f45f52ca59704bd4b8a639ddac045b604cChung-yih Wang private SipProfileDb mSipProfileDb; 822587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private Dialog[] mDialogs = new Dialog[DIALOG_SIZE]; 83f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang private SipProfile mOutgoingSipProfile; 84f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang private TextView mUnsetPriamryHint; 852587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private boolean mUseSipPhone = false; 86f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang private boolean mMakePrimary = false; 872587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 882587d9c6437b680911e252efecc73788e876de76Chung-yih Wang @Override 892587d9c6437b680911e252efecc73788e876de76Chung-yih Wang public void onCreate(Bundle savedInstanceState) { 902587d9c6437b680911e252efecc73788e876de76Chung-yih Wang super.onCreate(savedInstanceState); 912587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 9275e3711d82d0c98444f6c438437cad41d862fca6David Brown Intent intent = getIntent(); 9375e3711d82d0c98444f6c438437cad41d862fca6David Brown String action = intent.getAction(); 9475e3711d82d0c98444f6c438437cad41d862fca6David Brown 9575e3711d82d0c98444f6c438437cad41d862fca6David Brown // This activity is only ever launched with the 9675e3711d82d0c98444f6c438437cad41d862fca6David Brown // ACTION_SIP_SELECT_PHONE action. 9775e3711d82d0c98444f6c438437cad41d862fca6David Brown if (!OutgoingCallBroadcaster.ACTION_SIP_SELECT_PHONE.equals(action)) { 9875e3711d82d0c98444f6c438437cad41d862fca6David Brown Log.wtf(TAG, "onCreate: got intent action '" + action + "', expected " 9975e3711d82d0c98444f6c438437cad41d862fca6David Brown + OutgoingCallBroadcaster.ACTION_SIP_SELECT_PHONE); 100a841177ae2676d3ad92f82f8d378bc4915f238c9David Brown finish(); 101a841177ae2676d3ad92f82f8d378bc4915f238c9David Brown return; 10275e3711d82d0c98444f6c438437cad41d862fca6David Brown } 10375e3711d82d0c98444f6c438437cad41d862fca6David Brown 10475e3711d82d0c98444f6c438437cad41d862fca6David Brown // mIntent is a copy of the original CALL intent that started the 10575e3711d82d0c98444f6c438437cad41d862fca6David Brown // whole outgoing-call sequence. This intent will ultimately be 10675e3711d82d0c98444f6c438437cad41d862fca6David Brown // passed to CallController.placeCall() after displaying the SIP 10775e3711d82d0c98444f6c438437cad41d862fca6David Brown // call options dialog (if necessary). 10875e3711d82d0c98444f6c438437cad41d862fca6David Brown mIntent = (Intent) intent.getParcelableExtra(OutgoingCallBroadcaster.EXTRA_NEW_CALL_INTENT); 1092587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (mIntent == null) { 1102587d9c6437b680911e252efecc73788e876de76Chung-yih Wang finish(); 1112587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return; 1122587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 1132587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 11475e3711d82d0c98444f6c438437cad41d862fca6David Brown // Allow this activity to be visible in front of the keyguard. 11575e3711d82d0c98444f6c438437cad41d862fca6David Brown // (This is only necessary for obscure scenarios like the user 11675e3711d82d0c98444f6c438437cad41d862fca6David Brown // initiating a call and then immediately pressing the Power 11775e3711d82d0c98444f6c438437cad41d862fca6David Brown // button.) 118e7047b76710892ba666bd5072a19e20200024845Hung-ying Tyan getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 119e7047b76710892ba666bd5072a19e20200024845Hung-ying Tyan 1202587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // If we're trying to make a SIP call, return a SipPhone if one is 1212587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // available. 1222587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // 1232587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // - If it's a sip: URI, this is definitely a SIP call, regardless 1242587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // of whether the data is a SIP address or a regular phone 1252587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // number. 1262587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // 1272587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // - If this is a tel: URI but the data contains an "@" character 1282587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // (see PhoneNumberUtils.isUriNumber()) we consider that to be a 1292587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // SIP number too. 1302587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // 1312587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // TODO: Eventually we may want to disallow that latter case 1322587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // (e.g. "tel:foo@example.com"). 1332587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // 1342587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // TODO: We should also consider moving this logic into the 1352587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // CallManager, where it could be made more generic. 1362587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // (For example, each "telephony provider" could be allowed 1372587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // to register the URI scheme(s) that it can handle, and the 1382587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // CallManager would then find the best match for every 1392587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // outgoing call.) 1402587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 14158a62f78a11fdb9c772a8544ad302603fd58bdebHung-ying Tyan boolean voipSupported = PhoneUtils.isVoipSupported(); 14275e3711d82d0c98444f6c438437cad41d862fca6David Brown if (DBG) Log.v(TAG, "voipSupported: " + voipSupported); 143e67c35f45f52ca59704bd4b8a639ddac045b604cChung-yih Wang mSipProfileDb = new SipProfileDb(this); 1442587d9c6437b680911e252efecc73788e876de76Chung-yih Wang mSipSharedPreferences = new SipSharedPreferences(this); 1452587d9c6437b680911e252efecc73788e876de76Chung-yih Wang mCallOption = mSipSharedPreferences.getSipCallOption(); 14675e3711d82d0c98444f6c438437cad41d862fca6David Brown if (DBG) Log.v(TAG, "Call option: " + mCallOption); 1472587d9c6437b680911e252efecc73788e876de76Chung-yih Wang Uri uri = mIntent.getData(); 1482587d9c6437b680911e252efecc73788e876de76Chung-yih Wang String scheme = uri.getScheme(); 1492587d9c6437b680911e252efecc73788e876de76Chung-yih Wang mNumber = PhoneNumberUtils.getNumberFromIntent(mIntent, this); 150f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang boolean isInCellNetwork = PhoneApp.getInstance().phoneMgr.isRadioOn(); 15165454c803eb305c4740885ad4995a871b034a58aDavid Brown boolean isKnownCallScheme = Constants.SCHEME_TEL.equals(scheme) 15265454c803eb305c4740885ad4995a871b034a58aDavid Brown || Constants.SCHEME_SIP.equals(scheme); 15365454c803eb305c4740885ad4995a871b034a58aDavid Brown boolean isRegularCall = Constants.SCHEME_TEL.equals(scheme) 15465454c803eb305c4740885ad4995a871b034a58aDavid Brown && !PhoneNumberUtils.isUriNumber(mNumber); 1552587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 15627e36a876affc4c95d188a61b5d1c173f69d9346Chung-yih Wang // Bypass the handler if the call scheme is not sip or tel. 15727e36a876affc4c95d188a61b5d1c173f69d9346Chung-yih Wang if (!isKnownCallScheme) { 15827e36a876affc4c95d188a61b5d1c173f69d9346Chung-yih Wang setResultAndFinish(); 15927e36a876affc4c95d188a61b5d1c173f69d9346Chung-yih Wang return; 16027e36a876affc4c95d188a61b5d1c173f69d9346Chung-yih Wang } 16127e36a876affc4c95d188a61b5d1c173f69d9346Chung-yih Wang 162f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // Check if VoIP feature is supported. 163f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if (!voipSupported) { 164f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if (!isRegularCall) { 165f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang showDialog(DIALOG_NO_VOIP); 166f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang } else { 167f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang setResultAndFinish(); 168f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang } 1692587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return; 1702587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 171f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang 172f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // Since we are not sure if anyone has touched the number during 173f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // the NEW_OUTGOING_CALL broadcast, we just check if the provider 174f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // put their gateway information in the intent. If so, it means 175f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // someone has changed the destination number. We then make the 176f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // call via the default pstn network. However, if one just alters 177f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // the destination directly, then we still let it go through the 178f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // Internet call option process. 179f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if (!PhoneUtils.hasPhoneProviderExtras(mIntent)) { 180f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if (!isNetworkConnected()) { 181f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if (!isRegularCall) { 182f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang showDialog(DIALOG_NO_INTERNET_ERROR); 183f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang return; 184f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang } 185f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang } else { 186f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if (mCallOption.equals(Settings.System.SIP_ASK_ME_EACH_TIME) 187f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang && isRegularCall && isInCellNetwork) { 188f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang showDialog(DIALOG_SELECT_PHONE_TYPE); 189f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang return; 190f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang } 191f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if (!mCallOption.equals(Settings.System.SIP_ADDRESS_ONLY) 192f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang || !isRegularCall) { 193f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang mUseSipPhone = true; 194f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang } 195f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang } 1962587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 197f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang 1982587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (mUseSipPhone) { 199f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // If there is no sip profile and it is a regular call, then we 200f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang // should use pstn network instead. 201f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang if ((mSipProfileDb.getProfilesCount() > 0) || !isRegularCall) { 202b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan startGetPrimarySipPhoneThread(); 203f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang return; 204b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan } else { 205f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang mUseSipPhone = false; 206b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan } 2072587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 208f59d780498dc32051d0afdae8e76897262b59613Chung-yih Wang setResultAndFinish(); 2092587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 2102587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 2112587d9c6437b680911e252efecc73788e876de76Chung-yih Wang @Override 2122587d9c6437b680911e252efecc73788e876de76Chung-yih Wang public void onPause() { 2132587d9c6437b680911e252efecc73788e876de76Chung-yih Wang super.onPause(); 214f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang if (isFinishing()) return; 2152587d9c6437b680911e252efecc73788e876de76Chung-yih Wang for (Dialog dialog : mDialogs) { 2162587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (dialog != null) dialog.dismiss(); 2172587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 2182587d9c6437b680911e252efecc73788e876de76Chung-yih Wang finish(); 2192587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 2202587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 2212587d9c6437b680911e252efecc73788e876de76Chung-yih Wang protected Dialog onCreateDialog(int id) { 2222587d9c6437b680911e252efecc73788e876de76Chung-yih Wang Dialog dialog; 2232587d9c6437b680911e252efecc73788e876de76Chung-yih Wang switch(id) { 2242587d9c6437b680911e252efecc73788e876de76Chung-yih Wang case DIALOG_SELECT_PHONE_TYPE: 2252587d9c6437b680911e252efecc73788e876de76Chung-yih Wang dialog = new AlertDialog.Builder(this) 2264969ec954e54a743c6c61bffac0d4766c2a4ae12Chung-yih Wang .setTitle(R.string.pick_outgoing_call_phone_type) 227237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 2282587d9c6437b680911e252efecc73788e876de76Chung-yih Wang .setSingleChoiceItems(R.array.phone_type_values, -1, this) 2297395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang .setNegativeButton(android.R.string.cancel, this) 230aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan .setOnCancelListener(this) 2312587d9c6437b680911e252efecc73788e876de76Chung-yih Wang .create(); 2322587d9c6437b680911e252efecc73788e876de76Chung-yih Wang break; 2332587d9c6437b680911e252efecc73788e876de76Chung-yih Wang case DIALOG_SELECT_OUTGOING_SIP_PHONE: 2342587d9c6437b680911e252efecc73788e876de76Chung-yih Wang dialog = new AlertDialog.Builder(this) 2357395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang .setTitle(R.string.pick_outgoing_sip_phone) 236aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 2372587d9c6437b680911e252efecc73788e876de76Chung-yih Wang .setSingleChoiceItems(getProfileNameArray(), -1, this) 2387395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang .setNegativeButton(android.R.string.cancel, this) 239aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan .setOnCancelListener(this) 2402587d9c6437b680911e252efecc73788e876de76Chung-yih Wang .create(); 241f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang addMakeDefaultCheckBox(dialog); 2422587d9c6437b680911e252efecc73788e876de76Chung-yih Wang break; 2432587d9c6437b680911e252efecc73788e876de76Chung-yih Wang case DIALOG_START_SIP_SETTINGS: 2442587d9c6437b680911e252efecc73788e876de76Chung-yih Wang dialog = new AlertDialog.Builder(this) 245aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan .setTitle(R.string.no_sip_account_found_title) 2467395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang .setMessage(R.string.no_sip_account_found) 247aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 2487395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang .setPositiveButton(R.string.sip_menu_add, this) 2492587d9c6437b680911e252efecc73788e876de76Chung-yih Wang .setNegativeButton(android.R.string.cancel, this) 250aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan .setOnCancelListener(this) 2512587d9c6437b680911e252efecc73788e876de76Chung-yih Wang .create(); 2522587d9c6437b680911e252efecc73788e876de76Chung-yih Wang break; 253122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang case DIALOG_NO_INTERNET_ERROR: 254237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan boolean wifiOnly = SipManager.isSipWifiOnly(this); 255122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang dialog = new AlertDialog.Builder(this) 256237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan .setTitle(wifiOnly ? R.string.no_wifi_available_title 257237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan : R.string.no_internet_available_title) 258237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan .setMessage(wifiOnly ? R.string.no_wifi_available 259237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan : R.string.no_internet_available) 260237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 261122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang .setPositiveButton(android.R.string.ok, this) 262122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang .setOnCancelListener(this) 263122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang .create(); 264122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang break; 265b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan case DIALOG_NO_VOIP: 266b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan dialog = new AlertDialog.Builder(this) 267b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan .setTitle(R.string.no_voip) 268b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 269b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 270b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan .setOnCancelListener(this) 271b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan .create(); 272b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan break; 2732587d9c6437b680911e252efecc73788e876de76Chung-yih Wang default: 2742587d9c6437b680911e252efecc73788e876de76Chung-yih Wang dialog = null; 2752587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 2762587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (dialog != null) { 2772587d9c6437b680911e252efecc73788e876de76Chung-yih Wang mDialogs[id] = dialog; 2782587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 2792587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return dialog; 2802587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 2812587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 282f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang private void addMakeDefaultCheckBox(Dialog dialog) { 283f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang LayoutInflater inflater = (LayoutInflater) getSystemService( 284f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang Context.LAYOUT_INFLATER_SERVICE); 285f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang View view = inflater.inflate( 286f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang com.android.internal.R.layout.always_use_checkbox, null); 287f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang CheckBox makePrimaryCheckBox = 288f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang (CheckBox)view.findViewById(com.android.internal.R.id.alwaysUse); 289f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang makePrimaryCheckBox.setText(R.string.remember_my_choice); 290f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang makePrimaryCheckBox.setOnCheckedChangeListener(this); 291f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mUnsetPriamryHint = (TextView)view.findViewById( 292f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang com.android.internal.R.id.clearDefaultHint); 293f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mUnsetPriamryHint.setText(R.string.reset_my_choice_hint); 294f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mUnsetPriamryHint.setVisibility(View.GONE); 295f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang ((AlertDialog)dialog).setView(view); 296f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang } 297f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang 2982587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private CharSequence[] getProfileNameArray() { 2992587d9c6437b680911e252efecc73788e876de76Chung-yih Wang CharSequence[] entries = new CharSequence[mProfileList.size()]; 3002587d9c6437b680911e252efecc73788e876de76Chung-yih Wang int i = 0; 3012587d9c6437b680911e252efecc73788e876de76Chung-yih Wang for (SipProfile p : mProfileList) { 3022587d9c6437b680911e252efecc73788e876de76Chung-yih Wang entries[i++] = p.getProfileName(); 3032587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3042587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return entries; 3052587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3062587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 3072587d9c6437b680911e252efecc73788e876de76Chung-yih Wang public void onClick(DialogInterface dialog, int id) { 3087395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang if (id == DialogInterface.BUTTON_NEGATIVE) { 3097395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang // button negative is cancel 3107395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang finish(); 3117395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang return; 3127395d9c6d825194669335edf26d72ce8b7fcbf2aJohn Wang } else if(dialog == mDialogs[DIALOG_SELECT_PHONE_TYPE]) { 3132587d9c6437b680911e252efecc73788e876de76Chung-yih Wang String selection = getResources().getStringArray( 3142587d9c6437b680911e252efecc73788e876de76Chung-yih Wang R.array.phone_type_values)[id]; 31575e3711d82d0c98444f6c438437cad41d862fca6David Brown if (DBG) Log.v(TAG, "User pick phone " + selection); 3162587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (selection.equals(getString(R.string.internet_phone))) { 3172587d9c6437b680911e252efecc73788e876de76Chung-yih Wang mUseSipPhone = true; 3182587d9c6437b680911e252efecc73788e876de76Chung-yih Wang startGetPrimarySipPhoneThread(); 3192587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return; 3202587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3212587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } else if (dialog == mDialogs[DIALOG_SELECT_OUTGOING_SIP_PHONE]) { 322f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mOutgoingSipProfile = mProfileList.get(id); 323b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan } else if ((dialog == mDialogs[DIALOG_NO_INTERNET_ERROR]) 324b1ebb4f7d314cdb376586d45a4d83172569f10e9Hung-ying Tyan || (dialog == mDialogs[DIALOG_NO_VOIP])) { 325122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang finish(); 326122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang return; 3272587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } else { 3282587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (id == DialogInterface.BUTTON_POSITIVE) { 3292587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // Redirect to sip settings and drop the call. 3302587d9c6437b680911e252efecc73788e876de76Chung-yih Wang Intent newIntent = new Intent(this, SipSettings.class); 3312587d9c6437b680911e252efecc73788e876de76Chung-yih Wang newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 3322587d9c6437b680911e252efecc73788e876de76Chung-yih Wang startActivity(newIntent); 3332587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3342587d9c6437b680911e252efecc73788e876de76Chung-yih Wang finish(); 3352587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return; 3362587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3372587d9c6437b680911e252efecc73788e876de76Chung-yih Wang setResultAndFinish(); 3382587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3392587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 340aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan public void onCancel(DialogInterface dialog) { 341aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan finish(); 342aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan } 343aebb42c6501f3a1e4c000328bb164c864ad0732eHung-ying Tyan 344f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 345f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mMakePrimary = isChecked; 346f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang if (isChecked) { 347f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mUnsetPriamryHint.setVisibility(View.VISIBLE); 348f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang } else { 349f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mUnsetPriamryHint.setVisibility(View.INVISIBLE); 350f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang } 351f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang } 352f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang 3532587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private void createSipPhoneIfNeeded(SipProfile p) { 3542587d9c6437b680911e252efecc73788e876de76Chung-yih Wang CallManager cm = PhoneApp.getInstance().mCM; 3552587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (PhoneUtils.getSipPhoneFromUri(cm, p.getUriString()) != null) return; 3562587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 3572587d9c6437b680911e252efecc73788e876de76Chung-yih Wang // Create the phone since we can not find it in CallManager 3582587d9c6437b680911e252efecc73788e876de76Chung-yih Wang try { 35985faf0d2e1a764a050f038f61ab5d5524ce2791dHung-ying Tyan SipManager.newInstance(this).open(p); 3602587d9c6437b680911e252efecc73788e876de76Chung-yih Wang Phone phone = PhoneFactory.makeSipPhone(p.getUriString()); 3612587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (phone != null) { 3622587d9c6437b680911e252efecc73788e876de76Chung-yih Wang cm.registerPhone(phone); 3632587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } else { 3642587d9c6437b680911e252efecc73788e876de76Chung-yih Wang Log.e(TAG, "cannot make sipphone profile" + p); 3652587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3662587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } catch (SipException e) { 3672587d9c6437b680911e252efecc73788e876de76Chung-yih Wang Log.e(TAG, "cannot open sip profile" + p, e); 3682587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3692587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3702587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 3712587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private void setResultAndFinish() { 3722587d9c6437b680911e252efecc73788e876de76Chung-yih Wang runOnUiThread(new Runnable() { 3732587d9c6437b680911e252efecc73788e876de76Chung-yih Wang public void run() { 374f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang if (mOutgoingSipProfile != null) { 375122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang if (!isNetworkConnected()) { 376122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang showDialog(DIALOG_NO_INTERNET_ERROR); 377122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang return; 378122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang } 37975e3711d82d0c98444f6c438437cad41d862fca6David Brown if (DBG) Log.v(TAG, "primary SIP URI is " + 380f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mOutgoingSipProfile.getUriString()); 381f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang createSipPhoneIfNeeded(mOutgoingSipProfile); 3822587d9c6437b680911e252efecc73788e876de76Chung-yih Wang mIntent.putExtra(OutgoingCallBroadcaster.EXTRA_SIP_PHONE_URI, 383f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mOutgoingSipProfile.getUriString()); 384f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang if (mMakePrimary) { 385f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mSipSharedPreferences.setPrimaryAccount( 386f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mOutgoingSipProfile.getUriString()); 387f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang } 3882587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 38975e3711d82d0c98444f6c438437cad41d862fca6David Brown 390f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang if (mUseSipPhone && mOutgoingSipProfile == null) { 3912587d9c6437b680911e252efecc73788e876de76Chung-yih Wang showDialog(DIALOG_START_SIP_SETTINGS); 3922587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return; 3932587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } else { 39475e3711d82d0c98444f6c438437cad41d862fca6David Brown // Woo hoo -- it's finally OK to initiate the outgoing call! 39575e3711d82d0c98444f6c438437cad41d862fca6David Brown PhoneApp.getInstance().callController.placeCall(mIntent); 3962587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3972587d9c6437b680911e252efecc73788e876de76Chung-yih Wang finish(); 3982587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 3992587d9c6437b680911e252efecc73788e876de76Chung-yih Wang }); 4002587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4012587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 402122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang private boolean isNetworkConnected() { 403122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang ConnectivityManager cm = (ConnectivityManager) getSystemService( 404122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang Context.CONNECTIVITY_SERVICE); 405122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang if (cm != null) { 406122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang NetworkInfo ni = cm.getActiveNetworkInfo(); 407237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan if ((ni == null) || !ni.isConnected()) return false; 408237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan 409237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan return ((ni.getType() == ConnectivityManager.TYPE_WIFI) 410237bc810571500ef543e5f7422bea119edfe923fHung-ying Tyan || !SipManager.isSipWifiOnly(this)); 411122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang } 412122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang return false; 413122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang } 414122a325545761dc9621ba7d5088b5ae6b99c3df9Chung-yih Wang 4152587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private void startGetPrimarySipPhoneThread() { 4162587d9c6437b680911e252efecc73788e876de76Chung-yih Wang new Thread(new Runnable() { 4172587d9c6437b680911e252efecc73788e876de76Chung-yih Wang public void run() { 4182587d9c6437b680911e252efecc73788e876de76Chung-yih Wang getPrimarySipPhone(); 4192587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4202587d9c6437b680911e252efecc73788e876de76Chung-yih Wang }).start(); 4212587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4222587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 4232587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private void getPrimarySipPhone() { 4242587d9c6437b680911e252efecc73788e876de76Chung-yih Wang String primarySipUri = mSipSharedPreferences.getPrimaryAccount(); 4252587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 426f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang mOutgoingSipProfile = getPrimaryFromExistingProfiles(primarySipUri); 427f2adde87c7c1e6d28b0bacd859d06ad9c8d92434Chung-yih Wang if (mOutgoingSipProfile == null) { 4282587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if ((mProfileList != null) && (mProfileList.size() > 0)) { 4292587d9c6437b680911e252efecc73788e876de76Chung-yih Wang runOnUiThread(new Runnable() { 4302587d9c6437b680911e252efecc73788e876de76Chung-yih Wang public void run() { 4312587d9c6437b680911e252efecc73788e876de76Chung-yih Wang showDialog(DIALOG_SELECT_OUTGOING_SIP_PHONE); 4322587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4332587d9c6437b680911e252efecc73788e876de76Chung-yih Wang }); 4342587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return; 4352587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4362587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4372587d9c6437b680911e252efecc73788e876de76Chung-yih Wang setResultAndFinish(); 4382587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4392587d9c6437b680911e252efecc73788e876de76Chung-yih Wang 4402587d9c6437b680911e252efecc73788e876de76Chung-yih Wang private SipProfile getPrimaryFromExistingProfiles(String primarySipUri) { 441e67c35f45f52ca59704bd4b8a639ddac045b604cChung-yih Wang mProfileList = mSipProfileDb.retrieveSipProfileList(); 4422587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (mProfileList == null) return null; 4432587d9c6437b680911e252efecc73788e876de76Chung-yih Wang for (SipProfile p : mProfileList) { 4442587d9c6437b680911e252efecc73788e876de76Chung-yih Wang if (p.getUriString().equals(primarySipUri)) return p; 4452587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4462587d9c6437b680911e252efecc73788e876de76Chung-yih Wang return null; 4472587d9c6437b680911e252efecc73788e876de76Chung-yih Wang } 4482587d9c6437b680911e252efecc73788e876de76Chung-yih Wang} 449