Merge "Rename listener to callback for ConferenceManager and rename strings 2/4" into lmp-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b2dc6b2..743f67c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -35,6 +35,7 @@
     <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
     <uses-permission android:name="android.permission.BIND_CONNECTION_SERVICE" />
     <uses-permission android:name="android.permission.BIND_INCALL_SERVICE" />
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
 
     <!-- Protects the ability to register any PhoneAccount with a capability flags of either
          PhoneAccount#CAPABILITY_CALL_PROVIDER or PhoneAccount#CAPABILITY_SIM_SUBSCRIPTION. -->
@@ -200,15 +201,6 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".PhoneAccountPreferencesActivity"
-                  android:label="@string/phone_account_preferences_title"
-                  android:configChanges="orientation|screenSize|keyboardHidden"
-                  android:exported="true">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-            </intent-filter>
-        </activity>
-
         <activity android:name=".ErrorDialogActivity"
                 android:configChanges="orientation|screenSize|keyboardHidden"
                 android:excludeFromRecents="true"
diff --git a/res/layout/phone_account_preferences.xml b/res/layout/phone_account_preferences.xml
deleted file mode 100644
index caf2a47..0000000
--- a/res/layout/phone_account_preferences.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <fragment
-            android:id="@+id/preferences_fragment"
-            class="com.android.telecomm.PhoneAccountPreferencesActivity$PreferencesFragment"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content" />
-</LinearLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d50d830..9ecc6bb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -76,21 +76,6 @@
         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>
 
-    <!-- Title for phone accounts settings screen -->
-    <string name="phone_account_preferences_title">Phone account settings</string>
-
-    <!-- Title for setting to select default outgoing phone account -->
-    <string name="default_outgoing_account_title">Default outgoing account</string>
-
-    <!-- Title for setting to select SIM call manager account -->
-    <string name="sim_call_manager_account">Wi-Fi calling account</string>
-
-    <!-- Indication to "ask every time" for accounts when making a call -->
-    <string name="account_ask_every_time">Ask every time</string>
-
-    <!-- Indication to not use a SIM call manager -->
-    <string name="do_not_use_sim_call_manager">Do not use Wi-Fi calling</string>
-
     <!-- Message indicating that the user is not allowed to make non-emergency outgoing phone calls
          due to a user restriction -->
     <string name="outgoing_call_not_allowed">This user is not allowed to make non-emergency phone calls</string>
diff --git a/res/xml/phone_account_preferences.xml b/res/xml/phone_account_preferences.xml
deleted file mode 100644
index 23313a1..0000000
--- a/res/xml/phone_account_preferences.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- Settings screen for selecting which PhoneAccountHandle to use by default
-     for making outgoing phone calls -->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-     android:title="@string/phone_account_preferences_title">
-    <com.android.telecomm.AccountSelectionPreference
-            android:key="default_outgoing_account"
-            android:title="@string/default_outgoing_account_title"
-            android:defaultValue=""
-            android:persistent="false" />
-    <com.android.telecomm.AccountSelectionPreference
-            android:key="sim_call_manager_account"
-            android:title="@string/sim_call_manager_account"
-            android:defaultValue=""
-            android:persistent="false" />
-</PreferenceScreen>
diff --git a/src/com/android/telecomm/AccountSelectionPreference.java b/src/com/android/telecomm/AccountSelectionPreference.java
deleted file mode 100644
index e7c2bc0..0000000
--- a/src/com/android/telecomm/AccountSelectionPreference.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-package com.android.telecomm;
-
-import android.content.Context;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.telecomm.PhoneAccountHandle;
-import android.util.AttributeSet;
-
-import java.util.List;
-import java.util.Objects;
-
-public class AccountSelectionPreference extends ListPreference implements
-        Preference.OnPreferenceChangeListener {
-
-    public interface AccountSelectionListener {
-        boolean onAccountSelected(AccountSelectionPreference pref, PhoneAccountHandle account);
-    }
-
-    private AccountSelectionListener mListener;
-    private PhoneAccountHandle[] mAccounts;
-    private String[] mEntryValues;
-    private CharSequence[] mEntries;
-
-    public AccountSelectionPreference(Context context) {
-        super(context);
-        setOnPreferenceChangeListener(this);
-    }
-
-    public AccountSelectionPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setOnPreferenceChangeListener(this);
-    }
-
-    public void setListener(AccountSelectionListener listener) {
-        mListener = listener;
-    }
-
-    public void setModel(
-            PhoneAccountRegistrar registrar,
-            List<PhoneAccountHandle> accountsList,
-            PhoneAccountHandle currentSelection,
-            CharSequence nullSelectionString) {
-        mAccounts = accountsList.toArray(new PhoneAccountHandle[accountsList.size()]);
-        mEntryValues = new String[mAccounts.length + 1];
-        mEntries = new CharSequence[mAccounts.length + 1];
-
-        int selectedIndex = mAccounts.length;  // Points to nullSelectionString by default
-        int i = 0;
-        for ( ; i < mAccounts.length; i++) {
-            CharSequence label = registrar.getPhoneAccount(mAccounts[i]).getLabel();
-            mEntries[i] = label == null ? null : label.toString();
-            mEntryValues[i] = Integer.toString(i);
-            if (Objects.equals(currentSelection, mAccounts[i])) {
-                selectedIndex = i;
-            }
-        }
-        mEntryValues[i] = Integer.toString(i);
-        mEntries[i] = nullSelectionString;
-
-        setEntryValues(mEntryValues);
-        setEntries(mEntries);
-        setValueIndex(selectedIndex);
-        setSummary(mEntries[selectedIndex]);
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        if (mListener != null) {
-            int index = Integer.parseInt((String) newValue);
-            PhoneAccountHandle account = index < mAccounts.length ? mAccounts[index] : null;
-            if (mListener.onAccountSelected(this, account)) {
-                setSummary(mEntries[index]);
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 6d3b98f..f354291 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -119,9 +119,14 @@
      * @param intent Call intent containing data about the handle to call.
      */
     private void processOutgoingCallIntent(Intent intent) {
-        String uriString = intent.getData().getSchemeSpecificPart();
-        Uri handle = Uri.fromParts(
-                PhoneNumberUtils.isUriNumber(uriString) ? "sip" : "tel", uriString, null);
+        Uri handle = intent.getData();
+        String scheme = handle.getScheme();
+        String uriString = handle.getSchemeSpecificPart();
+
+        if (!Constants.SCHEME_VOICEMAIL.equals(scheme)) {
+            handle = Uri.fromParts(PhoneNumberUtils.isUriNumber(uriString) ?
+                    Constants.SCHEME_SIP : Constants.SCHEME_TEL, uriString, null);
+        }
 
         UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
         if (userManager.hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS)
diff --git a/src/com/android/telecomm/Constants.java b/src/com/android/telecomm/Constants.java
new file mode 100644
index 0000000..9967fa2
--- /dev/null
+++ b/src/com/android/telecomm/Constants.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+package com.android.telecomm;
+
+/**
+ * App-wide constants for the phone app.
+ *
+ * Any constants that need to be shared between two or more classes within
+ * the com.android.phone package should be defined here.  (Constants that
+ * are private to only one class can go in that class's .java file.)
+ */
+public class Constants {
+    //
+    // URI schemes
+    //
+
+    public static final String SCHEME_SIP = "sip";
+    public static final String SCHEME_SMSTO = "smsto";
+    public static final String SCHEME_TEL = "tel";
+    public static final String SCHEME_VOICEMAIL = "voicemail";
+}
\ No newline at end of file
diff --git a/src/com/android/telecomm/MissedCallNotifier.java b/src/com/android/telecomm/MissedCallNotifier.java
index c3f162a..f3c87e2 100644
--- a/src/com/android/telecomm/MissedCallNotifier.java
+++ b/src/com/android/telecomm/MissedCallNotifier.java
@@ -53,7 +53,6 @@
         Calls.TYPE,
     };
     private static final int MISSED_CALL_NOTIFICATION_ID = 1;
-    private static final String SCHEME_SMSTO = "smsto";
 
     private final Context mContext;
     private final NotificationManager mNotificationManager;
@@ -237,7 +236,7 @@
     private PendingIntent createSendSmsFromNotificationPendingIntent(Uri handle) {
         return createTelecommPendingIntent(
                 TelecommBroadcastReceiver.ACTION_SEND_SMS_FROM_NOTIFICATION,
-                Uri.fromParts(SCHEME_SMSTO, handle.getSchemeSpecificPart(), null));
+                Uri.fromParts(Constants.SCHEME_SMSTO, handle.getSchemeSpecificPart(), null));
     }
 
     /**
diff --git a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
index 57a776f..1032018 100644
--- a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
@@ -65,10 +65,6 @@
     public static final String EXTRA_GATEWAY_ORIGINAL_URI =
             "com.android.phone.extra.GATEWAY_ORIGINAL_URI";
 
-    private static final String SCHEME_TEL = "tel";
-    private static final String SCHEME_SIP = "sip";
-    private static final String SCHEME_VOICEMAIL = "voicemail";
-
     private final CallsManager mCallsManager;
     private final Call mCall;
     private final Intent mIntent;
@@ -117,10 +113,8 @@
                 return;
             }
 
-            Uri resultHandleUri = Uri.fromParts(
-                    PhoneNumberUtils.isUriNumber(resultNumber) ? SCHEME_SIP : SCHEME_TEL,
-                    resultNumber,
-                    null);
+            Uri resultHandleUri = Uri.fromParts(PhoneNumberUtils.isUriNumber(resultNumber) ?
+                    Constants.SCHEME_SIP : Constants.SCHEME_TEL, resultNumber, null);
 
             Uri originalUri = mIntent.getData();
 
@@ -169,7 +163,7 @@
             return DisconnectCause.INVALID_NUMBER;
         }
 
-        boolean isVoicemailNumber = SCHEME_VOICEMAIL.equals(handle.getScheme());
+        boolean isVoicemailNumber = Constants.SCHEME_VOICEMAIL.equals(handle.getScheme());
         if (isVoicemailNumber) {
             if (Intent.ACTION_CALL.equals(action)) {
                 // Voicemail calls will be handled directly by the telephony connection manager
@@ -234,7 +228,7 @@
         if (callImmediately) {
             Log.i(this, "Placing call immediately instead of waiting for "
                     + " OutgoingCallBroadcastReceiver: %s", intent);
-            String scheme = isUriNumber ? SCHEME_SIP : SCHEME_TEL;
+            String scheme = isUriNumber ? Constants.SCHEME_SIP : Constants.SCHEME_TEL;
             boolean speakerphoneOn = mIntent.getBooleanExtra(
                     TelecommManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false);
             int videoState = mIntent.getIntExtra(
diff --git a/src/com/android/telecomm/PhoneAccountPreferencesActivity.java b/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
deleted file mode 100644
index 7b64631..0000000
--- a/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-package com.android.telecomm;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.preference.PreferenceFragment;
-import android.telecomm.PhoneAccount;
-import android.telecomm.PhoneAccountHandle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PhoneAccountPreferencesActivity extends Activity {
-
-    private static final String KEY_DEFAULT_OUTGOING_ACCOUNT = "default_outgoing_account";
-    private static final String KEY_SIM_CALL_MANAGER_ACCOUNT = "sim_call_manager_account";
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.phone_account_preferences);
-    }
-
-    public static class PreferencesFragment extends PreferenceFragment
-            implements AccountSelectionPreference.AccountSelectionListener {
-        private AccountSelectionPreference mDefaultOutgoingAccount;
-        private AccountSelectionPreference mSimCallManagerAccount;
-
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-
-            addPreferencesFromResource(R.xml.phone_account_preferences);
-
-            mDefaultOutgoingAccount = (AccountSelectionPreference)
-                    findPreference(KEY_DEFAULT_OUTGOING_ACCOUNT);
-            mSimCallManagerAccount = (AccountSelectionPreference)
-                    findPreference(KEY_SIM_CALL_MANAGER_ACCOUNT);
-
-            PhoneAccountRegistrar registrar = TelecommApp.getInstance().getPhoneAccountRegistrar();
-
-            mDefaultOutgoingAccount.setModel(
-                    registrar,
-                    registrar.getOutgoingPhoneAccounts(),
-                    registrar.getUserSelectedOutgoingPhoneAccount(),
-                    getString(R.string.account_ask_every_time));
-
-            mSimCallManagerAccount.setModel(
-                    registrar,
-                    registrar.getAllConnectionManagerPhoneAccounts(),
-                    registrar.getSimCallManager(),
-                    getString(R.string.do_not_use_sim_call_manager));
-
-            mDefaultOutgoingAccount.setListener(this);
-            mSimCallManagerAccount.setListener(this);
-        }
-
-        @Override
-        public boolean onAccountSelected(
-                AccountSelectionPreference p, PhoneAccountHandle account) {
-            PhoneAccountRegistrar registrar = TelecommApp.getInstance().getPhoneAccountRegistrar();
-            if (p == mDefaultOutgoingAccount) {
-                registrar.setDefaultOutgoingPhoneAccount(account);
-                return true;
-            } else if (p == mSimCallManagerAccount) {
-                registrar.setSimCallManager(account);
-                return true;
-            }
-            return false;
-        }
-    }
-}
diff --git a/src/com/android/telecomm/PhoneAccountRegistrar.java b/src/com/android/telecomm/PhoneAccountRegistrar.java
index f7652d7..74cdf90 100644
--- a/src/com/android/telecomm/PhoneAccountRegistrar.java
+++ b/src/com/android/telecomm/PhoneAccountRegistrar.java
@@ -147,7 +147,7 @@
         return null;
     }
 
-    public void setDefaultOutgoingPhoneAccount(PhoneAccountHandle accountHandle) {
+    public void setUserSelectedOutgoingPhoneAccount(PhoneAccountHandle accountHandle) {
         if (accountHandle == null) {
             // Asking to clear the default outgoing is a valid request
             mState.defaultOutgoing = null;
diff --git a/src/com/android/telecomm/RespondViaSmsManager.java b/src/com/android/telecomm/RespondViaSmsManager.java
index f1e6033..60f419d 100644
--- a/src/com/android/telecomm/RespondViaSmsManager.java
+++ b/src/com/android/telecomm/RespondViaSmsManager.java
@@ -38,8 +38,6 @@
  * Helper class to manage the "Respond via Message" feature for incoming calls.
  */
 public class RespondViaSmsManager extends CallsManagerListenerBase {
-    private static final String SCHEME_SMSTO = "smsto";
-
     private static final int MSG_CANNED_TEXT_MESSAGES_READY = 1;
     private static final int MSG_SHOW_SENT_TOAST = 2;
 
@@ -170,7 +168,7 @@
                             TelecommApp.getInstance(), true /*updateIfNeeded*/);
             if (component != null) {
                 // Build and send the intent
-                final Uri uri = Uri.fromParts(SCHEME_SMSTO, phoneNumber, null);
+                final Uri uri = Uri.fromParts(Constants.SCHEME_SMSTO, phoneNumber, null);
                 final Intent intent = new Intent(TelephonyManager.ACTION_RESPOND_VIA_MESSAGE, uri);
                 intent.putExtra(Intent.EXTRA_TEXT, textMessage);
                 mHandler.obtainMessage(MSG_SHOW_SENT_TOAST, phoneNumber).sendToTarget();
diff --git a/src/com/android/telecomm/TelecommServiceImpl.java b/src/com/android/telecomm/TelecommServiceImpl.java
index ef26085..93337a5 100644
--- a/src/com/android/telecomm/TelecommServiceImpl.java
+++ b/src/com/android/telecomm/TelecommServiceImpl.java
@@ -170,13 +170,23 @@
     }
 
     @Override
-    public void setDefaultOutgoingPhoneAccount(PhoneAccountHandle accountHandle) {
+    public PhoneAccountHandle getUserSelectedOutgoingPhoneAccount() {
+        try {
+            return mPhoneAccountRegistrar.getUserSelectedOutgoingPhoneAccount();
+        } catch (Exception e) {
+            Log.e(this, e, "getUserSelectedOutgoingPhoneAccount");
+            throw e;
+        }
+    }
+
+    @Override
+    public void setUserSelectedOutgoingPhoneAccount(PhoneAccountHandle accountHandle) {
         enforceModifyPermission();
 
         try {
-            mPhoneAccountRegistrar.setDefaultOutgoingPhoneAccount(accountHandle);
+            mPhoneAccountRegistrar.setUserSelectedOutgoingPhoneAccount(accountHandle);
         } catch (Exception e) {
-            Log.e(this, e, "setDefaultOutgoingPhoneAccount");
+            Log.e(this, e, "setUserSelectedOutgoingPhoneAccount");
             throw e;
         }
     }
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 8ae47d2..47ce802 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -60,6 +60,11 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
+            <intent-filter>
+                <action android:name="android.telecomm.testapps.ACTION_START_INCOMING_CALL" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:scheme="tel" />
+            </intent-filter>
         </activity>
 
         <receiver android:name="com.android.telecomm.testapps.CallNotificationReceiver"
diff --git a/tests/src/com/android/telecomm/testapps/CallNotificationReceiver.java b/tests/src/com/android/telecomm/testapps/CallNotificationReceiver.java
index fb44069..5b49434 100644
--- a/tests/src/com/android/telecomm/testapps/CallNotificationReceiver.java
+++ b/tests/src/com/android/telecomm/testapps/CallNotificationReceiver.java
@@ -20,6 +20,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.telecomm.PhoneAccountHandle;
 import android.telecomm.TelecommManager;
@@ -55,19 +56,19 @@
         } else if (ACTION_SHOW_ALL_PHONE_ACCOUNTS.equals(action)) {
             CallServiceNotifier.getInstance().showAllPhoneAccounts(context);
         } else if (ACTION_VIDEO_CALL.equals(action)) {
-            sendIncomingCallIntent(context, true);
+            sendIncomingCallIntent(context, null, true);
         } else if (ACTION_AUDIO_CALL.equals(action)) {
-            sendIncomingCallIntent(context, false);
+            sendIncomingCallIntent(context, null, false);
         }
     }
 
     /**
-     * Creates the intent to add an incoming call through Telecomm.
+     * Creates and sends the intent to add an incoming call through Telecomm.
      *
      * @param context The current context.
      * @param isVideoCall {@code True} if this is a video call.
      */
-    private void sendIncomingCallIntent(Context context, boolean isVideoCall) {
+    public static void sendIncomingCallIntent(Context context, Uri handle, boolean isVideoCall) {
         PhoneAccountHandle phoneAccount = new PhoneAccountHandle(
                 new ComponentName(context, TestConnectionService.class),
                 CallServiceNotifier.SIM_SUBSCRIPTION_ID);
@@ -75,7 +76,10 @@
         // For the purposes of testing, indicate whether the incoming call is a video call by
         // stashing an indicator in the EXTRA_INCOMING_CALL_EXTRAS.
         Bundle extras = new Bundle();
-        extras.putBoolean(TestConnectionService.IS_VIDEO_CALL, isVideoCall);
+        extras.putBoolean(TestConnectionService.EXTRA_IS_VIDEO_CALL, isVideoCall);
+        if (handle != null) {
+            extras.putParcelable(TestConnectionService.EXTRA_HANDLE, handle);
+        }
 
         TelecommManager.from(context).addNewIncomingCall(phoneAccount, extras);
     }
diff --git a/tests/src/com/android/telecomm/testapps/TestCallActivity.java b/tests/src/com/android/telecomm/testapps/TestCallActivity.java
index b85888d..4caf3e8 100644
--- a/tests/src/com/android/telecomm/testapps/TestCallActivity.java
+++ b/tests/src/com/android/telecomm/testapps/TestCallActivity.java
@@ -17,21 +17,41 @@
 package com.android.telecomm.testapps;
 
 import android.app.Activity;
+import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
+import android.util.Log;
 
 /**
  * This activity exists in order to add an icon to the launcher. This activity has no UI of its own
  * and instead starts the notification for {@link TestConnectionService} via
  * {@link CallServiceNotifier}. After triggering a notification update, this activity immediately
  * finishes.
+ *
+ * To directly trigger a new incoming call, use the following adb command:
+ *
+ * adb shell am start -a android.telecomm.testapps.ACTION_START_INCOMING_CALL -d "tel:123456789"
  */
 public class TestCallActivity extends Activity {
 
+    public static final String ACTION_NEW_INCOMING_CALL =
+            "android.telecomm.testapps.ACTION_START_INCOMING_CALL";
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-
+        final Intent intent = getIntent();
+        if (intent != null && intent.getData() != null) {
+            startIncomingCallBroadcast(intent.getData());
+        }
         CallServiceNotifier.getInstance().updateNotification(this);
         finish();
     }
+
+    /**
+     * Bypass the notification and start the test incoming call directly.
+     */
+    private void startIncomingCallBroadcast(Uri handle) {
+        CallNotificationReceiver.sendIncomingCallIntent(this, handle, false);
+    }
 }
diff --git a/tests/src/com/android/telecomm/testapps/TestConnectionService.java b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
index c50e7ab..e5d54e9 100644
--- a/tests/src/com/android/telecomm/testapps/TestConnectionService.java
+++ b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
Binary files differ
diff --git a/tests/src/com/android/telecomm/testapps/TestVideoProvider.java b/tests/src/com/android/telecomm/testapps/TestVideoProvider.java
index 64a64ed..f338101 100644
--- a/tests/src/com/android/telecomm/testapps/TestVideoProvider.java
+++ b/tests/src/com/android/telecomm/testapps/TestVideoProvider.java
@@ -18,7 +18,7 @@
 
 import com.android.ex.camera2.blocking.BlockingCameraManager;
 import com.android.ex.camera2.blocking.BlockingCameraManager.BlockingOpenException;
-import com.android.ex.camera2.blocking.BlockingSessionListener;
+import com.android.ex.camera2.blocking.BlockingSessionCallback;
 import com.android.telecomm.tests.R;
 
 import android.content.Context;
@@ -253,7 +253,7 @@
         surfaces.add(mPreviewSurface);
         CaptureRequest.Builder mCaptureRequest = null;
         try {
-            BlockingSessionListener blkSession = new BlockingSessionListener();
+            BlockingSessionCallback blkSession = new BlockingSessionCallback();
             mCameraDevice.createCaptureSession(surfaces, blkSession, mHandler);
             mCaptureRequest = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
             mCaptureRequest.addTarget(mPreviewSurface);
@@ -265,7 +265,7 @@
 
         // Keep repeating
         try {
-            mCameraSession.setRepeatingRequest(mCaptureRequest.build(), new CameraCaptureListener(),
+            mCameraSession.setRepeatingRequest(mCaptureRequest.build(), new CameraCaptureCallback(),
                     mHandler);
         } catch (CameraAccessException e) {
             log("CameraAccessException: " + e);
@@ -294,7 +294,7 @@
     /**
      * Required listener for camera capture events.
      */
-    private class CameraCaptureListener extends CameraCaptureSession.CaptureListener {
+    private class CameraCaptureCallback extends CameraCaptureSession.CaptureCallback {
         @Override
         public void onCaptureCompleted(CameraCaptureSession camera, CaptureRequest request,
                 TotalCaptureResult result) {
diff --git a/tests/src/com/android/telecomm/tests/unit/PhoneAccountRegistrarTest.java b/tests/src/com/android/telecomm/tests/unit/PhoneAccountRegistrarTest.java
index 3522153..41b7924 100644
--- a/tests/src/com/android/telecomm/tests/unit/PhoneAccountRegistrarTest.java
+++ b/tests/src/com/android/telecomm/tests/unit/PhoneAccountRegistrarTest.java
@@ -242,7 +242,7 @@
         // Establish initial conditions
         assertEquals(null, mRegistrar.getDefaultOutgoingPhoneAccount("tel"));
         PhoneAccountHandle h = new PhoneAccountHandle(new ComponentName("pkg0", "cls0"), "id1");
-        mRegistrar.setDefaultOutgoingPhoneAccount(h);
+        mRegistrar.setUserSelectedOutgoingPhoneAccount(h);
         assertPhoneAccountHandleEquals(h, mRegistrar.getDefaultOutgoingPhoneAccount("tel"));
         // If account is un-registered, querying returns null
         mRegistrar.unregisterPhoneAccount(h);
@@ -251,10 +251,10 @@
         mRegistrar.registerPhoneAccount(makeQuickAccount("pkg0", "cls0", "id1", 99));
         assertPhoneAccountHandleEquals(h, mRegistrar.getDefaultOutgoingPhoneAccount("tel"));
         // De-register by setting to null
-        mRegistrar.setDefaultOutgoingPhoneAccount(null);
+        mRegistrar.setUserSelectedOutgoingPhoneAccount(null);
         assertEquals(null, mRegistrar.getDefaultOutgoingPhoneAccount("tel"));
         // If argument not have CALL_PROVIDER capability, this is a no-op
-        mRegistrar.setDefaultOutgoingPhoneAccount(
+        mRegistrar.setUserSelectedOutgoingPhoneAccount(
                 new PhoneAccountHandle(new ComponentName("pkg0", "cls0"), "id0"));
         assertEquals(null, mRegistrar.getDefaultOutgoingPhoneAccount("tel"));
         // If only have one account, it is the default