From ce6bc0e203c42529c1c48df398da102e99e3f2b0 Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Mon, 25 Jun 2018 10:47:13 +0200 Subject: Allow per-call account selection. Change-Id: Ieac27294f4069b2cff17bb39a0954f74320ad943 --- .../dialer/dialpadview/DialpadFragment.java | 45 +++++++++++++++++++++- .../dialpadview/res/menu/dialpad_options.xml | 6 ++- 2 files changed, 49 insertions(+), 2 deletions(-) (limited to 'java/com/android/dialer/dialpadview') diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java index 2d0eff543..cc16658e6 100644 --- a/java/com/android/dialer/dialpadview/DialpadFragment.java +++ b/java/com/android/dialer/dialpadview/DialpadFragment.java @@ -50,6 +50,7 @@ import android.support.annotation.VisibleForTesting; import android.support.design.widget.FloatingActionButton; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; +import android.telecom.TelecomManager; import android.telephony.PhoneNumberFormattingTextWatcher; import android.telephony.PhoneNumberUtils; import android.telephony.ServiceState; @@ -64,6 +65,7 @@ import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; +import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; @@ -204,6 +206,8 @@ public class DialpadFragment extends Fragment private boolean isLayoutRtl; private boolean isLandscape; + private PhoneAccountHandle selectedAccount; + private DialerExecutor initPhoneNumberFormattingTextWatcherExecutor; private boolean isDialpadSlideUp; @@ -1021,6 +1025,37 @@ public class DialpadFragment extends Fragment item.setVisible(CallUtil.isCallWithSubjectSupported(getContext())); } } + + final MenuItem callWithItem = menu.findItem(R.id.call_with); + List accounts = + CallUtil.getCallCapablePhoneAccounts(getContext(), PhoneAccount.SCHEME_TEL); + if (accounts != null && accounts.size() > 1) { + final PhoneAccountHandle selected; + if (selectedAccount != null) { + selected = selectedAccount; + } else { + selected = TelecomUtil.getDefaultOutgoingPhoneAccount(getContext(), + PhoneAccount.SCHEME_TEL); + } + + SubMenu callWithMenu = callWithItem.getSubMenu(); + callWithMenu.clear(); + + for (PhoneAccount account : accounts) { + final PhoneAccountHandle handle = account.getAccountHandle(); + final Intent intent = new Intent() + .putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, handle); + + callWithMenu.add(Menu.FIRST, Menu.NONE, Menu.NONE, account.getLabel()) + .setIntent(intent) + .setChecked(handle.equals(selected)); + } + callWithMenu.setGroupCheckable(Menu.FIRST, true, true); + callWithItem.setVisible(callWithMenu.hasVisibleItems()); + } else { + callWithItem.setVisible(false); + } + super.show(); } }; @@ -1186,7 +1221,9 @@ public class DialpadFragment extends Fragment // Clear the digits just in case. clearDialpad(); } else { - PreCall.start(getContext(), new CallIntentBuilder(number, CallInitiationType.Type.DIALPAD)); + CallIntentBuilder builder = new CallIntentBuilder(number, CallInitiationType.Type.DIALPAD) + .setPhoneAccountHandle(selectedAccount); + PreCall.start(getContext(), builder); hideAndClearDialpad(); } } @@ -1196,6 +1233,7 @@ public class DialpadFragment extends Fragment if (digits != null) { digits.getText().clear(); } + selectedAccount = null; } private void handleDialButtonClickWithEmptyDigits() { @@ -1420,6 +1458,11 @@ public class DialpadFragment extends Fragment @Override public boolean onMenuItemClick(MenuItem item) { + if (item.getGroupId() == Menu.FIRST) { + Intent intent = item.getIntent(); + selectedAccount = intent.getParcelableExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE); + return true; + } int resId = item.getItemId(); if (resId == R.id.menu_2s_pause) { updateDialString(PAUSE); diff --git a/java/com/android/dialer/dialpadview/res/menu/dialpad_options.xml b/java/com/android/dialer/dialpadview/res/menu/dialpad_options.xml index 2921ea3bb..760a004b4 100644 --- a/java/com/android/dialer/dialpadview/res/menu/dialpad_options.xml +++ b/java/com/android/dialer/dialpadview/res/menu/dialpad_options.xml @@ -14,7 +14,11 @@ limitations under the License. --> - + + +