Merge "Revert "Allow default and system dialers to make emergency calls via ACTION_CALL""
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/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/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
+    }
 }