Merge "Add intent broadcast when a PhoneAccount is enabled or disabled. (3/3)" into lmp-dev
diff --git a/res/drawable-hdpi/fab_teal_background.png b/res/drawable-hdpi/fab_teal_background.png
deleted file mode 100644
index e2f01e8..0000000
--- a/res/drawable-hdpi/fab_teal_background.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/fab_teal_background.png b/res/drawable-mdpi/fab_teal_background.png
deleted file mode 100644
index c95d124..0000000
--- a/res/drawable-mdpi/fab_teal_background.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/fab_teal_background.png b/res/drawable-xhdpi/fab_teal_background.png
deleted file mode 100644
index f94f759..0000000
--- a/res/drawable-xhdpi/fab_teal_background.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_teal_background.png b/res/drawable-xxhdpi/fab_teal_background.png
deleted file mode 100644
index cc0ba27..0000000
--- a/res/drawable-xxhdpi/fab_teal_background.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/floating_action_button.xml b/res/drawable/floating_action_button.xml
index d518ddd..52799e4 100644
--- a/res/drawable/floating_action_button.xml
+++ b/res/drawable/floating_action_button.xml
@@ -16,6 +16,6 @@
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/dialer_accent_color">
- <item android:drawable="@drawable/fab_teal_background" />
+ android:color="@color/floating_action_button_touch_tint">
+ <item android:drawable="@drawable/fab_green" />
</ripple>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index f629da0..c7701fc 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -45,12 +45,14 @@
<color name="actionbar_background_color_dark">@color/dialer_theme_color_dark</color>
<!-- Color for icons in the actionbar. Ensure this stays in sync with Dialer version. -->
<color name="actionbar_icon_color">#ffffff</color>
+ <!-- Color of title text in actionbar. Ensure this stays in sync with Dialer version. -->
+ <color name="actionbar_text_color">#ffffff</color>
<!-- Color for the setting text. -->
<color name="setting_primary_color">#4d4c4c</color>
<!-- Color for the setting description text. -->
<color name="setting_secondary_color">#989898</color>
- <color name="dialer_dialpad_touch_tint">#331dc7db</color>
- <color name="dialer_accent_color">#eeff41</color>
+ <color name="dialer_dialpad_touch_tint">#330288d1</color>
+ <color name="floating_action_button_touch_tint">#80ffffff</color>
<color name="dialer_theme_color">#0288d1</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0cd350b..267f142 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -69,6 +69,8 @@
<dimen name="dialpad_horizontal_margin">4dp</dimen>
<dimen name="dialpad_vertical_margin">2dp</dimen>
<dimen name="dialpad_digits_text_size">35sp</dimen>
+ <dimen name="dialpad_space_above_keys">29dp</dimen>
+ <dimen name="dialpad_bottom_key_height">113dp</dimen>
<!-- Just used in landscape mode -->
<dimen name="emergency_dialer_digits_height">0px</dimen>
@@ -98,4 +100,12 @@
<dimen name="action_bar_height">56dp</dimen>
<dimen name="action_bar_elevation">2dp</dimen>
<dimen name="actionbar_contentInsetStart">72dp</dimen>
+
+ <!-- Width, height and bottom margin for the floating action button. These values are
+ intentionally larger than the values used inside Dialer, since the dialpad is larger
+ inside the Emergency Dialer than the regular Dialer. -->
+ <dimen name="floating_action_button_width">67dp</dimen>
+ <dimen name="floating_action_button_height">67dp</dimen>
+ <dimen name="floating_action_button_margin_bottom">26dp</dimen>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index afc1bd2..d886dab 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -234,19 +234,22 @@
<style name="ContactsActionBarStyle"
parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/people_app_theme_color</item>
- <item name="android:backgroundStacked">@color/people_app_theme_color</item>
+ <item name="android:backgroundStacked">@color/people_app_theme_color</item>gs
</style>
<!-- Style for the call settings action bar. Should be kept in sync with Dialer. -->
- <style name="DialtactsActionBarStyle" parent="android:Widget.Material.ActionBar">
+ <style name="DialtactsActionBarStyle" parent="@style/TelephonyActionBarStyle">
+ <!-- Shift the title text to the right -->
+ <item name="android:contentInsetStart">@dimen/actionbar_contentInsetStart</item>
+ </style>
+
+ <style name="TelephonyActionBarStyle" parent="android:Widget.Material.ActionBar">
<item name="android:background">@color/actionbar_background_color</item>
<item name="android:titleTextStyle">@style/DialtactsActionBarTitleText</item>
<item name="android:height">@dimen/action_bar_height</item>
<item name="android:elevation">@dimen/action_bar_elevation</item>
<!-- Empty icon -->
<item name="android:icon">@android:color/transparent</item>
- <!-- Shift the title text to the right -->
- <item name="android:contentInsetStart">@dimen/actionbar_contentInsetStart</item>
</style>
<!-- Text in the action bar at the top of the screen. Should be kept in sync with Dialer. -->
@@ -263,6 +266,9 @@
<style name="EmergencyDialerTheme" parent="@android:style/Theme.Material.Light">
<item name="dialpad_key_button_touch_tint">@color/dialer_dialpad_touch_tint</item>
+ <item name="android:actionBarStyle">@style/TelephonyActionBarStyle</item>
+ <item name="android:colorPrimary">@color/dialer_theme_color</item>
+ <item name="android:colorPrimaryDark">@color/dialer_theme_color_dark</item>
</style>
<style name="SimImportTheme"
diff --git a/sip/src/com/android/services/telephony/sip/SipConnection.java b/sip/src/com/android/services/telephony/sip/SipConnection.java
index bb316e2..dc7f720 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnection.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnection.java
@@ -64,7 +64,7 @@
getPhone().registerForPreciseCallStateChanged(mHandler, MSG_PRECISE_CALL_STATE_CHANGED,
null);
}
- updateHandle();
+ updateAddress();
setInitialized();
}
@@ -226,7 +226,7 @@
case ALERTING:
setDialing();
// For SIP calls, we need to ask the framework to play the ringback for us.
- setRequestingRingback(true);
+ setRingbackRequested(true);
break;
case INCOMING:
case WAITING:
@@ -272,14 +272,14 @@
/**
* Updates the handle on this connection based on the original connection.
*/
- private void updateHandle() {
+ private void updateAddress() {
if (mOriginalConnection != null) {
- Uri handle = getHandleFromAddress(mOriginalConnection.getAddress());
+ Uri address = getAddressFromNumber(mOriginalConnection.getAddress());
int presentation = mOriginalConnection.getNumberPresentation();
- if (!Objects.equals(handle, getHandle()) ||
- presentation != getHandlePresentation()) {
- com.android.services.telephony.Log.v(this, "updateHandle, handle changed");
- setHandle(handle, presentation);
+ if (!Objects.equals(address, getAddress()) ||
+ presentation != getAddressPresentation()) {
+ com.android.services.telephony.Log.v(this, "updateAddress, address changed");
+ setAddress(address, presentation);
}
String name = mOriginalConnection.getCnapName();
@@ -287,24 +287,24 @@
if (!Objects.equals(name, getCallerDisplayName()) ||
namePresentation != getCallerDisplayNamePresentation()) {
com.android.services.telephony.Log
- .v(this, "updateHandle, caller display name changed");
+ .v(this, "updateAddress, caller display name changed");
setCallerDisplayName(name, namePresentation);
}
}
}
/**
- * Determines the handle for an incoming number.
+ * Determines the address for an incoming number.
*
- * @param address The incoming number.
+ * @param number The incoming number.
* @return The Uri representing the number.
*/
- private static Uri getHandleFromAddress(String address) {
+ private static Uri getAddressFromNumber(String number) {
// Address can be null for blocked calls.
- if (address == null) {
- address = "";
+ if (number == null) {
+ number = "";
}
- return Uri.fromParts(PhoneAccount.SCHEME_SIP, address, null);
+ return Uri.fromParts(PhoneAccount.SCHEME_SIP, number, null);
}
private void close() {
diff --git a/sip/src/com/android/services/telephony/sip/SipConnectionService.java b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
index 16efc4d..74d66f9 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnectionService.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
@@ -68,7 +68,8 @@
if (VERBOSE) log("onCreateOutgoingConnection, request: " + request);
Bundle extras = request.getExtras();
- if (extras != null && extras.getString(SipUtil.GATEWAY_PROVIDER_PACKAGE) != null) {
+ if (extras != null &&
+ extras.getString(TelecommManager.GATEWAY_PROVIDER_PACKAGE) != null) {
return Connection.createFailedConnection(
DisconnectCause.CALL_BARRED, "Cannot make a SIP call with a gateway number.");
}
@@ -81,7 +82,7 @@
}
final SipConnection connection = new SipConnection();
- connection.setHandle(request.getAddress(), TelecommManager.PRESENTATION_ALLOWED);
+ connection.setAddress(request.getAddress(), TelecommManager.PRESENTATION_ALLOWED);
connection.setInitializing();
connection.onAddedToCallService();
boolean attemptCall = true;
diff --git a/sip/src/com/android/services/telephony/sip/SipUtil.java b/sip/src/com/android/services/telephony/sip/SipUtil.java
index ee28d6d..6194902 100644
--- a/sip/src/com/android/services/telephony/sip/SipUtil.java
+++ b/sip/src/com/android/services/telephony/sip/SipUtil.java
@@ -31,8 +31,7 @@
import android.telecomm.TelecommManager;
import android.text.TextUtils;
-import java.util.Arrays;
-import java.util.List;
+import java.util.ArrayList;
public class SipUtil {
static final String LOG_TAG = "SIP";
@@ -40,8 +39,6 @@
"com.android.services.telephony.sip.incoming_call_intent";
static final String EXTRA_PHONE_ACCOUNT =
"com.android.services.telephony.sip.phone_account";
- static final String GATEWAY_PROVIDER_PACKAGE =
- "com.android.phone.extra.GATEWAY_PROVIDER_PACKAGE";
private SipUtil() {
}
@@ -123,7 +120,8 @@
PhoneAccountHandle accountHandle =
SipUtil.createAccountHandle(context, profile.getUriString());
- List supportedUriSchemes = Arrays.asList(PhoneAccount.SCHEME_SIP);
+ final ArrayList<String> supportedUriSchemes = new ArrayList<String>();
+ supportedUriSchemes.add(PhoneAccount.SCHEME_SIP);
if (useSipForPstnCalls(context)) {
supportedUriSchemes.add(PhoneAccount.SCHEME_TEL);
}
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 31b6f01..91fd49e 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -30,6 +30,7 @@
import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.Connection.PostDialListener;
import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.imsphone.ImsPhoneConnection;
import java.lang.Override;
import java.util.Objects;
@@ -66,7 +67,7 @@
"not foreground connection, skipping");
return;
}
- setRequestingRingback((Boolean) ((AsyncResult) msg.obj).result);
+ setRingbackRequested((Boolean) ((AsyncResult) msg.obj).result);
break;
}
}
@@ -326,28 +327,29 @@
int newCallCapabilities = buildCallCapabilities();
newCallCapabilities = applyVideoCapabilities(newCallCapabilities);
newCallCapabilities = applyAudioQualityCapabilities(newCallCapabilities);
+ newCallCapabilities = applyConferenceTerminationCapabilities(newCallCapabilities);
if (getCallCapabilities() != newCallCapabilities) {
setCallCapabilities(newCallCapabilities);
}
}
- protected final void updateHandle() {
+ protected final void updateAddress() {
updateCallCapabilities();
if (mOriginalConnection != null) {
- Uri handle = getHandleFromAddress(mOriginalConnection.getAddress());
+ Uri address = getAddressFromNumber(mOriginalConnection.getAddress());
int presentation = mOriginalConnection.getNumberPresentation();
- if (!Objects.equals(handle, getHandle()) ||
- presentation != getHandlePresentation()) {
- Log.v(this, "updateHandle, handle changed");
- setHandle(handle, presentation);
+ if (!Objects.equals(address, getAddress()) ||
+ presentation != getAddressPresentation()) {
+ Log.v(this, "updateAddress, address changed");
+ setAddress(address, presentation);
}
String name = mOriginalConnection.getCnapName();
int namePresentation = mOriginalConnection.getCnapNamePresentation();
if (!Objects.equals(name, getCallerDisplayName()) ||
namePresentation != getCallerDisplayNamePresentation()) {
- Log.v(this, "updateHandle, caller display name changed");
+ Log.v(this, "updateAddress, caller display name changed");
setCallerDisplayName(name, namePresentation);
}
}
@@ -380,7 +382,7 @@
setVideoProvider(mOriginalConnection.getVideoProvider());
setAudioQuality(mOriginalConnection.getAudioQuality());
- updateHandle();
+ updateAddress();
}
protected void hangup(int disconnectCause) {
@@ -518,7 +520,7 @@
}
}
updateCallCapabilities();
- updateHandle();
+ updateAddress();
}
private void close() {
@@ -580,6 +582,27 @@
}
/**
+ * Applies capabilities specific to conferences termination to the
+ * {@code CallCapabilities} bit-mask.
+ *
+ * @param callCapabilities The {@code CallCapabilities} bit-mask.
+ * @return The capabilities with the IMS conference capabilities applied.
+ */
+ private int applyConferenceTerminationCapabilities(int callCapabilities) {
+ int currentCapabilities = callCapabilities;
+
+ // An IMS call cannot be individually disconnected or separated from its parent conference
+ boolean isImsCall = getOriginalConnection() instanceof ImsPhoneConnection;
+ if (!isImsCall) {
+ currentCapabilities |=
+ PhoneCapabilities.DISCONNECT_FROM_CONFERENCE
+ | PhoneCapabilities.SEPARATE_FROM_CONFERENCE;
+ }
+
+ return currentCapabilities;
+ }
+
+ /**
* Returns the local video capability state for the connection.
*
* @return {@code True} if the connection has local video capabilities.
@@ -630,12 +653,19 @@
updateCallCapabilities();
}
- private static Uri getHandleFromAddress(String address) {
+ /**
+ * Obtains the current call audio quality.
+ */
+ public int getAudioQuality() {
+ return mAudioQuality;
+ }
+
+ private static Uri getAddressFromNumber(String number) {
// Address can be null for blocked calls.
- if (address == null) {
- address = "";
+ if (number == null) {
+ number = "";
}
- return Uri.fromParts(PhoneAccount.SCHEME_TEL, address, null);
+ return Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null);
}
/**
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 29e78fa..38b6001 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -143,7 +143,7 @@
return Connection.createFailedConnection(
DisconnectCause.OUTGOING_FAILURE, "Invalid phone type");
}
- connection.setHandle(handle, PhoneConstants.PRESENTATION_ALLOWED);
+ connection.setAddress(handle, PhoneConstants.PRESENTATION_ALLOWED);
connection.setInitializing();
connection.setVideoState(request.getVideoState());
@@ -224,7 +224,7 @@
private void placeOutgoingConnection(
TelephonyConnection connection, Phone phone, ConnectionRequest request) {
- String number = connection.getHandle().getSchemeSpecificPart();
+ String number = connection.getAddress().getSchemeSpecificPart();
com.android.internal.telephony.Connection originalConnection;
try {