From 0e84b83f23af354872b64fc1d1d77d22d825c71c Mon Sep 17 00:00:00 2001 From: Evan Charlton Date: Tue, 15 Jul 2014 14:26:31 -0700 Subject: Show message or call-back number in InCallUI If the ConnectionService sets a call-back number or message, show it in the in-call UI. Bug: 13334257 Bug: 13334252 Change-Id: If7fde7c1ca6940cec8b7232469a22900c36dbb17 --- InCallUI/res/layout/call_card_content.xml | 8 +++++ InCallUI/res/values/strings.xml | 4 +++ .../src/com/android/incallui/CallCardFragment.java | 33 +++++++++++++++-- .../com/android/incallui/CallCardPresenter.java | 42 ++++++++++++++++++++-- .../src/com/android/incallui/InCallPresenter.java | 23 ++++++++++++ 5 files changed, 105 insertions(+), 5 deletions(-) (limited to 'InCallUI') diff --git a/InCallUI/res/layout/call_card_content.xml b/InCallUI/res/layout/call_card_content.xml index cb6f53309..c59c1c712 100644 --- a/InCallUI/res/layout/call_card_content.xml +++ b/InCallUI/res/layout/call_card_content.xml @@ -39,6 +39,14 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> + + Cannot connect video call + Your emergency call back number\n + %1$s + + diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java index abc53ae17..5080da048 100644 --- a/InCallUI/src/com/android/incallui/CallCardFragment.java +++ b/InCallUI/src/com/android/incallui/CallCardFragment.java @@ -28,6 +28,7 @@ import android.graphics.Point; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.telephony.DisconnectCause; +import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.view.Display; import android.view.LayoutInflater; @@ -43,7 +44,6 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; -import com.android.contacts.common.util.ViewUtil; import com.android.contacts.common.widget.FloatingActionButtonController; import com.android.phone.common.animation.AnimUtils; @@ -84,6 +84,9 @@ public class CallCardFragment extends BaseFragment - implements InCallStateListener, AudioModeListener, IncomingCallListener { + implements InCallStateListener, AudioModeListener, IncomingCallListener, + InCallDetailsListener { private static final String TAG = CallCardPresenter.class.getSimpleName(); private static final long CALL_TIME_UPDATE_INTERVAL = 1000; // in milliseconds @@ -98,6 +103,7 @@ public class CallCardPresenter extends Presenter // Register for call state changes last InCallPresenter.getInstance().addListener(this); InCallPresenter.getInstance().addIncomingCallListener(this); + InCallPresenter.getInstance().addDetailsListener(this); } @Override @@ -107,6 +113,7 @@ public class CallCardPresenter extends Presenter // stop getting call state changes InCallPresenter.getInstance().removeListener(this); InCallPresenter.getInstance().removeIncomingCallListener(this); + InCallPresenter.getInstance().removeDetailsListener(this); AudioModeProvider.getInstance().removeListener(this); @@ -199,6 +206,35 @@ public class CallCardPresenter extends Presenter getUi().setEndCallButtonEnabled(enableEndCallButton); } + @Override + public void onDetailsChanged(android.telecomm.Call.Details details) { + getUi().setCallDetails(details); + + String currentNumber = mPrimary.getHandle().getSchemeSpecificPart(); + if (PhoneNumberUtils.isEmergencyNumber(currentNumber)) { + setEmergencyNumberIfSet(details); + } + } + + private void setEmergencyNumberIfSet(android.telecomm.Call.Details details) { + String callbackNumber = null; + + StatusHints statusHints = details.getStatusHints(); + if (statusHints != null) { + Bundle extras = statusHints.getExtras(); + if (extras != null) { + callbackNumber = extras.getString( + TelecommConstants.EXTRA_EMERGENCY_CALL_BACK_NUMBER, null); + } else { + Log.d(this, "No extras; not updating callback number"); + } + } else { + Log.d(this, "No status hints; not updating callback number"); + } + + getUi().setEmergencyCallbackNumber(callbackNumber); + } + @Override public void onAudioMode(int mode) { } @@ -533,6 +569,8 @@ public class CallCardPresenter extends Presenter void setPrimaryPhoneNumber(String phoneNumber); void setPrimaryLabel(String label); void setEndCallButtonEnabled(boolean enabled); + void setEmergencyCallbackNumber(String number); + void setCallDetails(android.telecomm.Call.Details details); } private TelecommManager getTelecommManager() { diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java index 5965a950a..83d21b83f 100644 --- a/InCallUI/src/com/android/incallui/InCallPresenter.java +++ b/InCallUI/src/com/android/incallui/InCallPresenter.java @@ -44,6 +44,7 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener { private final Set mListeners = Sets.newHashSet(); private final ArrayList mIncomingCallListeners = Lists.newArrayList(); + private final Set mDetailsListeners = Sets.newHashSet(); private AudioModeProvider mAudioModeProvider; private StatusBarNotifier mStatusBarNotifier; @@ -80,6 +81,14 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener { CallList.getInstance().getCallByTelecommCall(call).getId(), remainingPostDialSequence); } + + @Override + public void onDetailsChanged(android.telecomm.Call call, + android.telecomm.Call.Details details) { + for (InCallDetailsListener listener : mDetailsListeners) { + listener.onDetailsChanged(details); + } + } }; /** @@ -369,6 +378,16 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener { mListeners.remove(listener); } + public void addDetailsListener(InCallDetailsListener listener) { + Preconditions.checkNotNull(listener); + mDetailsListeners.add(listener); + } + + public void removeDetailsListener(InCallDetailsListener listener) { + Preconditions.checkNotNull(listener); + mDetailsListeners.remove(listener); + } + public ProximitySensor getProximitySensor() { return mProximitySensor; } @@ -842,4 +861,8 @@ public class InCallPresenter implements CallList.Listener, InCallPhoneListener { public interface IncomingCallListener { public void onIncomingCall(InCallState state, Call call); } + + public interface InCallDetailsListener { + public void onDetailsChanged(android.telecomm.Call.Details details); + } } -- cgit v1.2.3