Merge "Move SIP settings to phone account settings." into lmp-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 34cd0f1..82bd4f4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -151,6 +151,8 @@
<string name="wifi_calling_do_not_use">Do not use Wi-Fi calling</string>
<!-- Indication for option to not use a call assistant. -->
<string name="wifi_calling_do_not_use_call_assistant">Do not use call assistant</string>
+ <!-- Indication for option to not use a call assistant. -->
+ <string name="wifi_calling_call_assistant_none">None</string>
<!-- Label for selected Wi-Fi call manager -->
<string name="wifi_calling_call_assistant">Call assistant</string>
<!-- Label for switch setting to enable/disable the use of SIM call managers. -->
diff --git a/res/xml/phone_account_settings.xml b/res/xml/phone_account_settings.xml
index 7c34b93..f812885 100644
--- a/res/xml/phone_account_settings.xml
+++ b/res/xml/phone_account_settings.xml
@@ -32,7 +32,7 @@
<com.android.phone.settings.AccountSelectionPreference
android:key="wifi_calling_call_assistant_preference"
android:title="@string/wifi_calling_call_assistant"
- android:summary="@string/wifi_calling_call_assistant_configure_no_selection" />
+ android:summary="@string/wifi_calling_call_assistant_none" />
<Preference
android:key="wifi_calling_configure_call_assistant_preference"
@@ -46,6 +46,16 @@
android:title="@string/sip_settings"
android:persistent="false">
+ <PreferenceScreen
+ android:title="@string/sip_accounts"
+ android:persistent="false">
+
+ <intent android:action="android.intent.action.MAIN"
+ android:targetPackage="com.android.phone"
+ android:targetClass="com.android.services.telephony.sip.SipSettings" />
+
+ </PreferenceScreen>
+
<ListPreference
android:key="use_sip_calling_options_key"
android:title="@string/sip_call_options_title"
@@ -53,6 +63,12 @@
android:entries="@array/sip_call_options_entries"
android:entryValues="@array/sip_call_options_values"/>
+ <CheckBoxPreference
+ android:key="sip_receive_calls_key"
+ android:title="@string/sip_receive_calls"
+ android:summary="@string/sip_receive_calls_summary"
+ android:persistent="true"/>
+
</PreferenceCategory>
</PreferenceScreen>
diff --git a/sip/res/xml/sip_setting.xml b/sip/res/xml/sip_setting.xml
index 91b8311..fa31e7c 100644
--- a/sip/res/xml/sip_setting.xml
+++ b/sip/res/xml/sip_setting.xml
@@ -16,12 +16,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/sip_accounts">
- <CheckBoxPreference
- android:key="sip_receive_calls_key"
- android:title="@string/sip_receive_calls"
- android:summary="@string/sip_receive_calls_summary"
- android:persistent="true"/>
-
<PreferenceCategory android:key="sip_account_list" android:title="@string/sip_account_list"/>
</PreferenceScreen>
diff --git a/sip/res/xml/sip_settings_category.xml b/sip/res/xml/sip_settings_category.xml
deleted file mode 100644
index 035a539..0000000
--- a/sip/res/xml/sip_settings_category.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:phone="http://schemas.android.com/apk/res/com.android.phone">
-
- <PreferenceScreen
- android:key="sip_settings_preference_screen_key"
- android:title="@string/sip_settings"
- android:persistent="false" >
-
- <PreferenceScreen
- android:key="sip_account_settings_key"
- android:title="@string/sip_accounts_title"
- android:persistent="false">
-
- <intent android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.phone"
- android:targetClass="com.android.services.telephony.sip.SipSettings" />
-
- </PreferenceScreen>
-
- </PreferenceScreen>
-
-</PreferenceScreen>
diff --git a/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java b/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java
index c808133..b54df59 100644
--- a/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java
+++ b/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java
@@ -33,7 +33,7 @@
/**
* Manages the {@link PhoneAccount} entries for SIP calling.
*/
-final class SipAccountRegistry {
+public final class SipAccountRegistry {
private final class AccountEntry {
private final SipProfile mProfile;
@@ -108,7 +108,7 @@
private SipAccountRegistry() {}
- static SipAccountRegistry getInstance() {
+ public static SipAccountRegistry getInstance() {
return INSTANCE;
}
@@ -172,7 +172,7 @@
*
* @param context The context.
*/
- void restartSipService(Context context) {
+ public void restartSipService(Context context) {
startSipProfiles(context, null);
}
diff --git a/sip/src/com/android/services/telephony/sip/SipSettings.java b/sip/src/com/android/services/telephony/sip/SipSettings.java
index 525fd0f..7da0131 100644
--- a/sip/src/com/android/services/telephony/sip/SipSettings.java
+++ b/sip/src/com/android/services/telephony/sip/SipSettings.java
@@ -66,8 +66,6 @@
static final String KEY_SIP_PROFILE = "sip_profile";
- private static final String BUTTON_SIP_RECEIVE_CALLS =
- "sip_receive_calls_key";
private static final String PREF_SIP_LIST = "sip_account_list";
private static final int REQUEST_ADD_OR_EDIT_SIP_PROFILE = 1;
@@ -78,7 +76,6 @@
private SipProfile mProfile; // profile that's being edited
- private CheckBoxPreference mButtonSipReceiveCalls;
private PreferenceCategory mSipListContainer;
private Map<String, SipPreference> mSipPreferenceMap;
private List<SipProfile> mSipProfileList;
@@ -146,7 +143,6 @@
setContentView(R.layout.sip_settings_ui);
addPreferencesFromResource(R.xml.sip_setting);
mSipListContainer = (PreferenceCategory) findPreference(PREF_SIP_LIST);
- registerForReceiveCallsCheckBox();
updateProfilesStatus();
@@ -159,8 +155,6 @@
@Override
public void onResume() {
super.onResume();
-
- mButtonSipReceiveCalls.setEnabled(SipUtil.isPhoneIdle(this));
}
@Override
@@ -195,62 +189,6 @@
}.start();
}
- private void registerForReceiveCallsCheckBox() {
- mButtonSipReceiveCalls = (CheckBoxPreference) findPreference
- (BUTTON_SIP_RECEIVE_CALLS);
- mButtonSipReceiveCalls.setChecked(
- mSipSharedPreferences.isReceivingCallsEnabled());
- mButtonSipReceiveCalls.setOnPreferenceClickListener(
- new OnPreferenceClickListener() {
- public boolean onPreferenceClick(Preference preference) {
- final boolean enabled = ((CheckBoxPreference) preference).isChecked();
- new Thread(new Runnable() {
- public void run() {
- handleSipReceiveCallsOption(enabled);
- }
- }).start();
- return true;
- }
- });
- }
-
- /**
- * Handles changes to the "receive calls" option.
- *
- * @param isReceivingCalls {@code True} if receiving incoming SIP calls.
- */
- private synchronized void handleSipReceiveCallsOption(boolean isReceivingCalls) {
- mSipSharedPreferences.setReceivingCallsEnabled(isReceivingCalls);
-
- // Mark all profiles as auto-register if we are now receiving calls.
- List<SipProfile> sipProfileList = mProfileDb.retrieveSipProfileList();
- for (SipProfile p : sipProfileList) {
- p = updateAutoRegistrationFlag(p, isReceivingCalls);
- }
-
- // Restart all Sip services to ensure we reflect whether we are receiving calls.
- SipAccountRegistry sipAccountRegistry = SipAccountRegistry.getInstance();
- sipAccountRegistry.restartSipService(this);
-
- updateProfilesStatus();
- }
-
- private SipProfile updateAutoRegistrationFlag(SipProfile p, boolean enabled) {
- SipProfile newProfile = new SipProfile.Builder(p)
- .setAutoRegistration(enabled)
- .build();
- try {
- // Note: The profile is updated, but the associated PhoneAccount is left alone since
- // the only thing that changed is the auto-registration flag, which is not part of the
- // PhoneAccount.
- mProfileDb.deleteProfile(p);
- mProfileDb.saveProfile(newProfile);
- } catch (Exception e) {
- log("updateAutoRegistrationFlag, exception: " + e);
- }
- return newProfile;
- }
-
private void updateProfilesStatus() {
new Thread(new Runnable() {
@Override
@@ -494,6 +432,10 @@
startSipEditor(null);
return true;
}
+ case android.R.id.home: {
+ onBackPressed();
+ return true;
+ }
}
return super.onOptionsItemSelected(item);
}
diff --git a/sip/src/com/android/services/telephony/sip/SipUtil.java b/sip/src/com/android/services/telephony/sip/SipUtil.java
index e4d5d4c..f93f02d 100644
--- a/sip/src/com/android/services/telephony/sip/SipUtil.java
+++ b/sip/src/com/android/services/telephony/sip/SipUtil.java
@@ -30,8 +30,10 @@
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.text.TextUtils;
+import android.util.Log;
import java.util.ArrayList;
+import java.util.List;
public class SipUtil {
static final String LOG_TAG = "SIP";
@@ -59,7 +61,7 @@
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
- static boolean isPhoneIdle(Context context) {
+ public static boolean isPhoneIdle(Context context) {
TelecomManager manager = (TelecomManager) context.getSystemService(
Context.TELECOM_SERVICE);
if (manager != null) {
@@ -131,4 +133,34 @@
final SipSharedPreferences sipSharedPreferences = new SipSharedPreferences(context);
return sipSharedPreferences.getSipCallOption().equals(Settings.System.SIP_ALWAYS);
}
+
+ /**
+ * Updates SIP accounts to indicate whether they are enabled to receive incoming SIP calls.
+ *
+ * @param isEnabled {@code True} if receiving incoming SIP calls.
+ */
+ public static void useSipToReceiveIncomingCalls(Context context, boolean isEnabled) {
+ SipProfileDb profileDb = new SipProfileDb(context);
+
+ // Mark all profiles as auto-register if we are now receiving calls.
+ List<SipProfile> sipProfileList = profileDb.retrieveSipProfileList();
+ for (SipProfile p : sipProfileList) {
+ updateAutoRegistrationFlag(p, profileDb, isEnabled);
+ }
+ }
+
+ private static void updateAutoRegistrationFlag(
+ SipProfile p, SipProfileDb db, boolean isEnabled) {
+ SipProfile newProfile = new SipProfile.Builder(p).setAutoRegistration(isEnabled).build();
+
+ try {
+ // Note: The profile is updated, but the associated PhoneAccount is left alone since
+ // the only thing that changed is the auto-registration flag, which is not part of the
+ // PhoneAccount.
+ db.deleteProfile(p);
+ db.saveProfile(newProfile);
+ } catch (Exception e) {
+ Log.d(LOG_TAG, "updateAutoRegistrationFlag, exception: " + e);
+ }
+ }
}
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index d1bb25a..a4ec5c8 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -1647,12 +1647,6 @@
updateVoiceNumberField();
mVMProviderSettingsForced = false;
- if (SipUtil.isVoipSupported(this)) {
- addPreferencesFromResource(
- com.android.services.telephony.sip.R.xml.sip_settings_category);
- }
-
-
if (mButtonDTMF != null) {
int dtmf = Settings.System.getInt(getContentResolver(),
Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, Constants.DTMF_TONE_TYPE_NORMAL);
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
index fb6365e..5222ae4 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
@@ -2,22 +2,18 @@
import android.content.ActivityNotFoundException;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
import android.net.sip.SipManager;
-import android.net.sip.SipProfile;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
-import android.preference.SwitchPreference;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.util.Log;
import com.android.phone.R;
+import com.android.services.telephony.sip.SipAccountRegistry;
import com.android.services.telephony.sip.SipSharedPreferences;
import com.android.services.telephony.sip.SipUtil;
@@ -43,6 +39,7 @@
private static final String SIP_SETTINGS_CATEGORY_PREF_KEY = "phone_accounts_sip_settings_key";
private static final String USE_SIP_PREF_KEY = "use_sip_calling_options_key";
+ private static final String SIP_RECEIVE_CALLS_PREF_KEY = "sip_receive_calls_key";
private String LOG_TAG = PhoneAccountSettingsFragment.class.getSimpleName();
@@ -53,6 +50,7 @@
private Preference mConfigureCallAssistant;
private ListPreference mUseSipCalling;
+ private CheckBoxPreference mSipReceiveCallsPreference;
private SipSharedPreferences mSipSharedPreferences;
@Override
@@ -109,6 +107,13 @@
mUseSipCalling.setValueIndex(
mUseSipCalling.findIndexOfValue(mSipSharedPreferences.getSipCallOption()));
mUseSipCalling.setSummary(mUseSipCalling.getEntry());
+
+ mSipReceiveCallsPreference = (CheckBoxPreference)
+ getPreferenceScreen().findPreference(SIP_RECEIVE_CALLS_PREF_KEY);
+ mSipReceiveCallsPreference.setEnabled(SipUtil.isPhoneIdle(getActivity()));
+ mSipReceiveCallsPreference.setChecked(
+ mSipSharedPreferences.isReceivingCallsEnabled());
+ mSipReceiveCallsPreference.setOnPreferenceChangeListener(this);
} else {
getPreferenceScreen().removePreference(
getPreferenceScreen().findPreference(SIP_SETTINGS_CATEGORY_PREF_KEY));
@@ -116,8 +121,7 @@
}
/**
- * Handles changes to the preferences, namely the switch which controls whether to use the call
- * assistant or not.
+ * Handles changes to the preferences.
*
* @param pref The preference changed.
* @param objValue The changed value.
@@ -131,6 +135,14 @@
mUseSipCalling.setValueIndex(mUseSipCalling.findIndexOfValue(option));
mUseSipCalling.setSummary(mUseSipCalling.getEntry());
return true;
+ } else if (pref == mSipReceiveCallsPreference) {
+ final boolean isEnabled = !mSipReceiveCallsPreference.isChecked();
+ new Thread(new Runnable() {
+ public void run() {
+ handleSipReceiveCallsOption(isEnabled);
+ }
+ }).start();
+ return true;
}
return false;
}
@@ -191,6 +203,16 @@
}
}
+ private synchronized void handleSipReceiveCallsOption(boolean isEnabled) {
+ mSipSharedPreferences.setReceivingCallsEnabled(isEnabled);
+
+ SipUtil.useSipToReceiveIncomingCalls(getActivity(), isEnabled);
+
+ // Restart all Sip services to ensure we reflect whether we are receiving calls.
+ SipAccountRegistry sipAccountRegistry = SipAccountRegistry.getInstance();
+ sipAccountRegistry.restartSipService(getActivity());
+ }
+
/**
* Queries the telcomm manager to update the default outgoing account selection preference
* with the list of outgoing accounts and the current default outgoing account.
@@ -213,7 +235,7 @@
mTelecomManager,
simCallManagers,
mTelecomManager.getSimCallManager(),
- getString(R.string.wifi_calling_do_not_use_call_assistant));
+ getString(R.string.wifi_calling_call_assistant_none));
updateConfigureCallAssistantSummary();
}