diff options
author | Sailesh Nepal <sail@google.com> | 2013-12-17 17:56:08 -0800 |
---|---|---|
committer | Sailesh Nepal <sail@google.com> | 2013-12-17 17:56:08 -0800 |
commit | e14843e2ce456ffca91ae83d0ccff722ca222e5d (patch) | |
tree | b0989de7663aae834158c982da35e55015e611bd /InCallUI/src/com/android/incallui | |
parent | e9e0c65ab11308c84271ab9e1d955fa4c977c4ce (diff) |
Add handoff buttons
This CL adds two buttons to the in call UI:
- video handoff - switch to video mode
- connection handoff - switch between wifi and cell
Change-Id: I42a36d22dc0a37d1ed00f1a3ab1ebcb53c35864c
Diffstat (limited to 'InCallUI/src/com/android/incallui')
5 files changed, 72 insertions, 3 deletions
diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java index ed7690334..536680c5a 100644 --- a/InCallUI/src/com/android/incallui/CallButtonFragment.java +++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java @@ -48,6 +48,8 @@ public class CallButtonFragment private ImageButton mMergeButton; private ImageButton mAddCallButton; private ImageButton mSwapButton; + private ImageButton mVideoHandoffButton; + private View mVideoHandoffSpacer; private PopupMenu mAudioModePopup; private boolean mAudioModePopupVisible; @@ -141,6 +143,9 @@ public class CallButtonFragment mMergeButton.setOnClickListener(this); mSwapButton = (ImageButton) parent.findViewById(R.id.swapButton); mSwapButton.setOnClickListener(this); + mVideoHandoffButton = (ImageButton) parent.findViewById(R.id.videoHandoffButton); + mVideoHandoffButton.setOnClickListener(this); + mVideoHandoffSpacer = parent.findViewById(R.id.videoHandoffSpacer); return parent; } @@ -183,6 +188,9 @@ public class CallButtonFragment case R.id.dialpadButton: getPresenter().showDialpadClicked(mShowDialpadButton.isChecked()); break; + case R.id.videoHandoffButton: + getPresenter().videoHandoffClicked(); + break; default: Log.wtf(this, "onClick: unexpected"); break; @@ -526,6 +534,11 @@ public class CallButtonFragment } } + @Override + public void showVideoHandoff(boolean show) { + mVideoHandoffButton.setVisibility(show ? View.VISIBLE : View.GONE); + mVideoHandoffSpacer.setVisibility(show ? View.VISIBLE : View.GONE); + } @Override public void showManageConferenceCallButton() { diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java index 67a642b06..0a0330629 100644 --- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java +++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java @@ -219,6 +219,10 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto updateExtraButtonRow(); } + public void videoHandoffClicked() { + CallCommandClient.getInstance().videoHandoff(mCall.getCallId()); + } + private void updateUi(InCallState state, Call call) { final CallButtonUi ui = getUi(); if (ui == null) { @@ -239,12 +243,12 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto Log.v(this, "Show swap ", call.can(Capabilities.SWAP_CALLS)); Log.v(this, "Show add call ", call.can(Capabilities.ADD_CALL)); Log.v(this, "Show mute ", call.can(Capabilities.MUTE)); + Log.v(this, "Show video handoff ", call.can(Capabilities.VIDEO_HANDOFF)); final boolean canMerge = call.can(Capabilities.MERGE_CALLS); final boolean canAdd = call.can(Capabilities.ADD_CALL); final boolean isGenericConference = call.can(Capabilities.GENERIC_CONFERENCE); - final boolean showMerge = !isGenericConference && canMerge; if (showMerge) { @@ -291,6 +295,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto } ui.enableMute(call.can(Capabilities.MUTE)); + ui.showVideoHandoff(call.can(Capabilities.VIDEO_HANDOFF)); // Finally, update the "extra button row": It's displayed above the // "End" button, but only if necessary. Also, it's never displayed @@ -357,5 +362,6 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto void showGenericMergeButton(); void hideExtraRow(); void displayManageConferencePanel(boolean on); + void showVideoHandoff(boolean show); } } diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java index 76cdf2ca9..c50e64aa0 100644 --- a/InCallUI/src/com/android/incallui/CallCardFragment.java +++ b/InCallUI/src/com/android/incallui/CallCardFragment.java @@ -30,6 +30,7 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewStub; import android.view.accessibility.AccessibilityEvent; +import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -52,6 +53,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr private ImageView mPhoto; private TextView mElapsedTime; private ViewGroup mSupplementaryInfoContainer; + private Button mConnectionHandoffButton; // Secondary caller info private ViewStub mSecondaryCallInfo; @@ -111,6 +113,13 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr mElapsedTime = (TextView) view.findViewById(R.id.elapsedTime); mSupplementaryInfoContainer = (ViewGroup) view.findViewById(R.id.supplementary_info_container); + mConnectionHandoffButton = (Button) view.findViewById(R.id.connectionHandoffButton); + mConnectionHandoffButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + getPresenter().connectionHandoffClicked(); + } + }); } @Override @@ -170,6 +179,11 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr } @Override + public void setShowConnectionHandoff(boolean showConnectionHandoff) { + mConnectionHandoffButton.setVisibility(showConnectionHandoff ? View.VISIBLE : View.GONE); + } + + @Override public void setPrimary(String number, String name, boolean nameIsNumber, String label, Drawable photo, boolean isConference, boolean isGeneric, boolean isSipCall) { Log.d(this, "Setting primary call"); @@ -258,13 +272,12 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr mCallStateLabel.setText(getResources().getString(R.string.in_call_wifi_connected, wifiConnection)); mCallStateLabel.setGravity(Gravity.START | Gravity.CENTER_VERTICAL); - mCallStateLabel.setBackgroundResource(R.color.wifi_connected_background); mCallStateLabel.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_in_call_wifi, 0, 0, 0); mCallStateLabel.setCompoundDrawablePadding(5); mCallStateLabel.setAllCaps(false); mCallStateLabel.setVisibility(View.VISIBLE); - + mSupplementaryInfoContainer.setBackgroundResource(R.color.wifi_connected_background); } else if (!TextUtils.isEmpty(callStateLabel)) { mCallStateLabel.setGravity(Gravity.END); mCallStateLabel.setAllCaps(true); @@ -274,6 +287,8 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr if (Call.State.INCOMING == state) { setBluetoothOn(bluetoothOn); } + mSupplementaryInfoContainer.setBackgroundResource( + R.color.incall_secondary_info_background); } else { mCallStateLabel.setVisibility(View.GONE); mCallStateLabel.setCompoundDrawables(null, null, null, null); diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java index e81ec8526..4c010a565 100644 --- a/InCallUI/src/com/android/incallui/CallCardPresenter.java +++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java @@ -195,6 +195,9 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> } else { ui.setCallState(Call.State.IDLE, Call.DisconnectCause.UNKNOWN, false, null, null, null); } + + ui.setShowConnectionHandoff(mPrimary != null && mPrimary.can( + Capabilities.CONNECTION_HANDOFF)); } @Override @@ -469,6 +472,12 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> CallCommandClient.getInstance().swap(); } + public void connectionHandoffClicked() { + if (mPrimary != null) { + CallCommandClient.getInstance().connectionHandoff(mPrimary.getCallId()); + } + } + public interface CallCardUi extends Ui { void setVisible(boolean on); void setPrimary(String number, String name, boolean nameIsNumber, String label, @@ -483,5 +492,6 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> void setPrimaryImage(Drawable image); void setPrimaryPhoneNumber(String phoneNumber); void setPrimaryLabel(String label); + void setShowConnectionHandoff(boolean showConnectionHandoff); } } diff --git a/InCallUI/src/com/android/incallui/CallCommandClient.java b/InCallUI/src/com/android/incallui/CallCommandClient.java index 52d2100c8..234c518de 100644 --- a/InCallUI/src/com/android/incallui/CallCommandClient.java +++ b/InCallUI/src/com/android/incallui/CallCommandClient.java @@ -243,4 +243,29 @@ public class CallCommandClient { } } + public void videoHandoff(int callId) { + Log.i(this, "video handoff"); + if (mCommandService == null) { + Log.e(this, "Cannot perform video handoff; CallCommandService == null"); + return; + } + try { + mCommandService.videoHandoff(callId); + } catch (RemoteException e) { + Log.e(this, "Error performing video handoff.", e); + } + } + + public void connectionHandoff(int callId) { + Log.i(this, "connection handoff"); + if (mCommandService == null) { + Log.e(this, "Cannot perform connection handoff; CallCommandService == null"); + return; + } + try { + mCommandService.connectionHandoff(callId); + } catch (RemoteException e) { + Log.e(this, "Error performing connection handoff.", e); + } + } } |