Merge "Revert "Exercise default phone application request in TestDialer""
diff --git a/res/drawable-xxhdpi/chat_with_others.png b/res/drawable-xxhdpi/chat_with_others.png
new file mode 100644
index 0000000..6f6b03e
--- /dev/null
+++ b/res/drawable-xxhdpi/chat_with_others.png
Binary files differ
diff --git a/res/drawable-xxhdpi/market_wireless.png b/res/drawable-xxhdpi/market_wireless.png
new file mode 100644
index 0000000..e451fe7
--- /dev/null
+++ b/res/drawable-xxhdpi/market_wireless.png
Binary files differ
diff --git a/res/drawable-xxhdpi/q_mobile.png b/res/drawable-xxhdpi/q_mobile.png
new file mode 100644
index 0000000..cfc0624
--- /dev/null
+++ b/res/drawable-xxhdpi/q_mobile.png
Binary files differ
diff --git a/res/drawable-xxhdpi/talk_to_your_circles.png b/res/drawable-xxhdpi/talk_to_your_circles.png
new file mode 100644
index 0000000..d6bc672
--- /dev/null
+++ b/res/drawable-xxhdpi/talk_to_your_circles.png
Binary files differ
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 747eca7..e85d7b6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -75,4 +75,23 @@
<!-- "Respond via SMS": Confirmation message shown after sending
a text response. [CHAR LIMIT=40] -->
<string name="respond_via_sms_confirmation_format">Message sent to <xliff:g id="phone_number">%s</xliff:g>.</string>
+
+
+ <!-- DO NOT TRANSLATE. Label for test Subscription 0. -->
+ <string name="test_subscription_0_label">Q Mobile</string>
+ <!-- DO NOT TRANSLATE. Label for test Subscription 1. -->
+ <string name="test_subscription_1_label">Market Wireless</string>
+ <!-- DO NOT TRANSLATE. Label for test Subscription 2. -->
+ <string name="test_subscription_2_label">Sonoma Circles Talk Plus</string>
+ <!-- DO NOT TRANSLATE. Label for test Subscription 3. -->
+ <string name="test_subscription_3_label">Bay Voice Chat Pro</string>
+
+ <!-- DO NOT TRANSLATE. Short description for test Subscription 0. -->
+ <string name="test_subscription_0_short_description">Account with Q Mobile</string>
+ <!-- DO NOT TRANSLATE. Short description for test Subscription 1. -->
+ <string name="test_subscription_1_short_description">Account with Market Wireless</string>
+ <!-- DO NOT TRANSLATE. Short description for test Subscription 2. -->
+ <string name="test_subscription_2_short_description">Talk to everyone in your Circles!</string>
+ <!-- DO NOT TRANSLATE. Short description for test Subscription 3. -->
+ <string name="test_subscription_3_short_description">Chat with Chat Network users</string>
</resources>
diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 104ff4e..bf0f349 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -141,6 +141,8 @@
private boolean mIsEmergencyCall;
+ private boolean mSpeakerphoneOn;
+
/**
* Disconnect cause for the call. Only valid if the state of the call is DISCONNECTED.
* See {@link android.telephony.DisconnectCause}.
@@ -1037,4 +1039,20 @@
Log.d(this, "maybeLoadCannedSmsResponses: doing nothing");
}
}
+
+ /**
+ * Sets speakerphone option on when call begins.
+ */
+ public void setStartWithSpeakerphoneOn(boolean startWithSpeakerphone) {
+ mSpeakerphoneOn = startWithSpeakerphone;
+ }
+
+ /**
+ * Returns speakerphone option.
+ *
+ * @return Whether or not speakerphone should be set automatically when call begins.
+ */
+ public boolean getStartWithSpeakerphoneOn() {
+ return mSpeakerphoneOn;
+ }
}
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 5e5f710..5753d18 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -278,8 +278,10 @@
* @param contactInfo Information about the entity being called.
* @param gatewayInfo Optional gateway information that can be used to route the call to the
* actual dialed handle via a gateway provider. May be null.
+ * @param speakerphoneOn Whether or not to turn the speakerphone on once the call connects.
*/
- void placeOutgoingCall(Uri handle, ContactInfo contactInfo, GatewayInfo gatewayInfo) {
+ void placeOutgoingCall(Uri handle, ContactInfo contactInfo, GatewayInfo gatewayInfo,
+ boolean speakerphoneOn) {
final Uri uriHandle = (gatewayInfo == null) ? handle : gatewayInfo.getGatewayHandle();
if (gatewayInfo == null) {
@@ -291,6 +293,7 @@
Call call = new Call(
uriHandle, gatewayInfo, false /* isIncoming */, false /* isConference */);
+ call.setStartWithSpeakerphoneOn(speakerphoneOn);
// TODO(santoscordon): Move this to be a part of addCall()
call.addListener(this);
@@ -505,6 +508,9 @@
if (mPendingHandoffCalls.contains(call)) {
completeHandoff(call, true);
}
+ if (call.getStartWithSpeakerphoneOn()) {
+ setAudioRoute(CallAudioState.ROUTE_SPEAKER);
+ }
}
void markCallAsOnHold(Call call) {
diff --git a/src/com/android/telecomm/HeadsetMediaButton.java b/src/com/android/telecomm/HeadsetMediaButton.java
index dab2475..a0d5858 100644
--- a/src/com/android/telecomm/HeadsetMediaButton.java
+++ b/src/com/android/telecomm/HeadsetMediaButton.java
@@ -31,37 +31,6 @@
*/
final class HeadsetMediaButton extends CallsManagerListenerBase {
- /**
- * Broadcast receiver for the ACTION_MEDIA_BUTTON broadcast intent.
- *
- * This functionality isn't lumped in with the other intents in TelecommBroadcastReceiver
- * because we instantiate this as a totally separate BroadcastReceiver instance, since we need
- * to manually adjust its IntentFilter's priority (to make sure we get these intents *before*
- * the media player.)
- */
- private final class MediaButtonBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
- Log.v(this, "MediaButtonBroadcastReceiver.onReceive()... event = %s.", event);
- if ((event != null) && (event.getKeyCode() == KeyEvent.KEYCODE_HEADSETHOOK)) {
- boolean consumed = handleHeadsetHook(event);
- Log.v(this, "==> handleHeadsetHook(): consumed = %b.", consumed);
- if (consumed) {
- abortBroadcast();
- }
- } else {
- if (CallsManager.getInstance().hasAnyCalls()) {
- // If the phone is anything other than completely idle, then we consume and
- // ignore any media key events, otherwise it is too easy to accidentally start
- // playing music while a phone call is in progress.
- Log.v(this, "MediaButtonBroadcastReceiver: consumed");
- abortBroadcast();
- }
- }
- }
- }
-
// Types of media button presses
static final int SHORT_PRESS = 1;
static final int LONG_PRESS = 2;
@@ -79,9 +48,6 @@
}
};
- private final MediaButtonBroadcastReceiver mMediaButtonReceiver =
- new MediaButtonBroadcastReceiver();
-
private final CallsManager mCallsManager;
private final MediaSession mSession;
@@ -89,23 +55,6 @@
HeadsetMediaButton(Context context, CallsManager callsManager) {
mCallsManager = callsManager;
- // Use a separate receiver (from TelecommBroadcastReceiver) for ACTION_MEDIA_BUTTON
- // broadcasts, since we need to manually adjust its priority (to make sure we get these
- // intents *before* the media player.)
- IntentFilter mediaButtonIntentFilter =
- new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
-
- // Make sure we're higher priority than the media player's MediaButtonIntentReceiver (which
- // currently has the default priority of zero; see apps/Music/AndroidManifest.xml.)
- mediaButtonIntentFilter.setPriority(1);
-
- context.registerReceiver(mMediaButtonReceiver, mediaButtonIntentFilter);
-
- // register the component so it gets priority for calls
- AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
- am.registerMediaButtonEventReceiverForCalls(new ComponentName(context.getPackageName(),
- MediaButtonBroadcastReceiver.class.getName()));
-
// Register a MediaSession but don't enable it yet. This is a
// replacement for MediaButtonReceiver
MediaSessionManager msm =
diff --git a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
index a0a7c00..c40fde5 100644
--- a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
@@ -132,7 +132,9 @@
}
GatewayInfo gatewayInfo = getGateWayInfoFromIntent(intent, resultHandleUri);
- mCallsManager.placeOutgoingCall(resultHandleUri, mContactInfo, gatewayInfo);
+ mCallsManager.placeOutgoingCall(resultHandleUri, mContactInfo, gatewayInfo,
+ mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
+ false));
}
}
@@ -199,7 +201,9 @@
+ " OutgoingCallBroadcastReceiver: %s", intent);
String scheme = isUriNumber ? SCHEME_SIP : SCHEME_TEL;
mCallsManager.placeOutgoingCall(
- Uri.fromParts(scheme, handle, null), mContactInfo, null);
+ Uri.fromParts(scheme, handle, null), mContactInfo, null,
+ mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
+ false));
// Don't return but instead continue and send the ACTION_NEW_OUTGOING_CALL broadcast
// so that third parties can still inspect (but not intercept) the outgoing call. When
diff --git a/src/com/android/telecomm/TelecommServiceImpl.java b/src/com/android/telecomm/TelecommServiceImpl.java
index e3f8bcb..ef26a33 100644
--- a/src/com/android/telecomm/TelecommServiceImpl.java
+++ b/src/com/android/telecomm/TelecommServiceImpl.java
@@ -16,15 +16,20 @@
package com.android.telecomm;
+import com.google.android.collect.Lists;
+
+import com.android.internal.telecomm.ITelecommService;
+
import android.content.ComponentName;
-import android.content.Context;
import android.content.res.Resources;
+import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.os.ServiceManager;
+import android.telecomm.Subscription;
import android.text.TextUtils;
-import com.android.internal.telecomm.ITelecommService;
+import java.util.List;
/**
* Implementation of the ITelecomm interface.
@@ -136,4 +141,68 @@
return new ComponentName(packageName, className);
}
+
+ // TODO (STOPSHIP): Static list of Subscriptions for testing and UX work only.
+
+ private static final ComponentName sComponentName = new ComponentName(
+ "com.android.telecomm",
+ TelecommServiceImpl.class.getName()); // This field is a no-op
+
+ private static final List<Subscription> sSubscriptions = Lists.newArrayList(
+ new Subscription(
+ sComponentName,
+ "subscription0",
+ Uri.parse("tel:999-555-1212"),
+ R.string.test_subscription_0_label,
+ R.string.test_subscription_0_short_description,
+ R.drawable.q_mobile,
+ true,
+ true),
+ new Subscription(
+ sComponentName,
+ "subscription1",
+ Uri.parse("tel:333-111-2222"),
+ R.string.test_subscription_1_label,
+ R.string.test_subscription_1_short_description,
+ R.drawable.market_wireless,
+ true,
+ false),
+ new Subscription(
+ sComponentName,
+ "subscription2",
+ Uri.parse("mailto:two@example.com"),
+ R.string.test_subscription_2_label,
+ R.string.test_subscription_2_short_description,
+ R.drawable.talk_to_your_circles,
+ true,
+ false),
+ new Subscription(
+ sComponentName,
+ "subscription3",
+ Uri.parse("mailto:three@example.com"),
+ R.string.test_subscription_3_label,
+ R.string.test_subscription_3_short_description,
+ R.drawable.chat_with_others,
+ true,
+ false)
+ );
+
+
+
+ @Override
+ public List<Subscription> getSubscriptions() {
+ return sSubscriptions;
+ }
+
+ @Override
+ public void setEnabled(Subscription subscription, boolean enabled) {
+ // Enforce MODIFY_PHONE_STATE ?
+ // TODO
+ }
+
+ @Override
+ public void setSystemDefault(Subscription subscription) {
+ // Enforce MODIFY_PHONE_STATE ?
+ // TODO
+ }
}