From 3bf2a7dded6f0a0707dab2dfb1425c052f228e8a Mon Sep 17 00:00:00 2001 From: Ihab Awad Date: Tue, 10 Jun 2014 14:03:43 -0700 Subject: DO NOT MERGE. Port "respond via SMS message" feature to new Telecomm. (4/4) Bug: 15275904 Bug: 15196474 Change-Id: Id7125d7803a00a80728e412bba030566a838bbc2 --- .../src/com/android/incallui/AnswerFragment.java | 47 ++++++++++++---------- .../src/com/android/incallui/AnswerPresenter.java | 2 +- InCallUI/src/com/android/incallui/Call.java | 12 ++++++ InCallUI/src/com/android/incallui/CallList.java | 4 +- .../com/android/incallui/InCallServiceImpl.java | 6 +-- .../src/com/android/incallui/TelecommAdapter.java | 3 +- 6 files changed, 44 insertions(+), 30 deletions(-) diff --git a/InCallUI/src/com/android/incallui/AnswerFragment.java b/InCallUI/src/com/android/incallui/AnswerFragment.java index 2630303be..dfc902dc8 100644 --- a/InCallUI/src/com/android/incallui/AnswerFragment.java +++ b/InCallUI/src/com/android/incallui/AnswerFragment.java @@ -58,7 +58,9 @@ public class AnswerFragment extends BaseFragment mTextResponsesAdapter = null; + private ArrayAdapter mSmsResponsesAdapter; + + private final List mSmsResponses = new ArrayList<>(); private GlowPadWrapper mGlowpad; @@ -139,24 +141,26 @@ public class AnswerFragment extends BaseFragment(builder.getContext(), + android.R.layout.simple_list_item_1, android.R.id.text1, mSmsResponses); + + final ListView lv = new ListView(getActivity()); + lv.setAdapter(mSmsResponsesAdapter); lv.setOnItemClickListener(new RespondViaSmsItemClickListener()); - final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setCancelable( - true).setView(lv); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() { - @Override - public void onCancel(DialogInterface dialogInterface) { - if (mGlowpad != null) { - mGlowpad.startPing(); - } - dismissCannedResponsePopup(); - getPresenter().onDismissDialog(); - } - }); + builder.setCancelable(true).setView(lv).setOnCancelListener( + new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialogInterface) { + if (mGlowpad != null) { + mGlowpad.startPing(); + } + dismissCannedResponsePopup(); + getPresenter().onDismissDialog(); + } + }); mCannedResponsePopup = builder.create(); mCannedResponsePopup.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); mCannedResponsePopup.show(); @@ -274,12 +278,13 @@ public class AnswerFragment extends BaseFragment textResponses) { - final List textResponsesForDisplay = Lists.newArrayList(textResponses); - - textResponsesForDisplay.add(getResources().getString( + mSmsResponses.clear(); + mSmsResponses.addAll(textResponses); + mSmsResponses.add(getResources().getString( R.string.respond_via_sms_custom_message)); - mTextResponsesAdapter = new ArrayAdapter(getActivity(), - android.R.layout.simple_list_item_1, android.R.id.text1, textResponsesForDisplay); + if (mSmsResponsesAdapter != null) { + mSmsResponsesAdapter.notifyDataSetChanged(); + } } @Override diff --git a/InCallUI/src/com/android/incallui/AnswerPresenter.java b/InCallUI/src/com/android/incallui/AnswerPresenter.java index 1488d6a4c..78aa64b23 100644 --- a/InCallUI/src/com/android/incallui/AnswerPresenter.java +++ b/InCallUI/src/com/android/incallui/AnswerPresenter.java @@ -103,7 +103,7 @@ public class AnswerPresenter extends Presenter @Override - public void onCallStateChanged(Call call) { + public void onCallChanged(Call call) { Log.d(this, "onCallStateChange() " + call + " " + this); if (call.getState() != Call.State.INCOMING && call.getState() != Call.State.CALL_WAITING) { // Stop listening for updates. diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java index bb079b5ea..fccf608fa 100644 --- a/InCallUI/src/com/android/incallui/Call.java +++ b/InCallUI/src/com/android/incallui/Call.java @@ -26,6 +26,7 @@ import android.telephony.DisconnectCause; import com.google.common.collect.ImmutableSortedSet; import com.google.common.primitives.Ints; +import java.util.Collections; import java.util.List; import java.util.Locale; @@ -100,6 +101,7 @@ public final class Call { private String mCallId; private int mState = State.INVALID; private int mDisconnectCause = DisconnectCause.NOT_VALID; + private List mCannedSmsResponses = Collections.EMPTY_LIST; private int mCapabilities; private long mConnectTimeMillis = 0; private Uri mHandle; @@ -170,6 +172,16 @@ public final class Call { mDisconnectCause = cause; } + /** Sets the possible text message responses. */ + public void setCannedSmsResponses(List cannedSmsResponses) { + mCannedSmsResponses = cannedSmsResponses; + } + + /** Returns the possible text message responses. */ + public List getCannedSmsResponses() { + return mCannedSmsResponses; + } + /** Sets a bit mask of capabilities unique to this call. */ public void setCapabilities(int capabilities) { mCapabilities = (CallCapabilities.ALL & capabilities); diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java index df993f544..022281224 100644 --- a/InCallUI/src/com/android/incallui/CallList.java +++ b/InCallUI/src/com/android/incallui/CallList.java @@ -123,7 +123,7 @@ public class CallList { final List listeners = mCallUpdateListenerMap.get(call.getCallId()); if (listeners != null) { for (CallUpdateListener listener : listeners) { - listener.onCallStateChanged(call); + listener.onCallChanged(call); } } } @@ -474,6 +474,6 @@ public class CallList { public interface CallUpdateListener { // TODO: refactor and limit arg to be call state. Caller info is not needed. - public void onCallStateChanged(Call call); + public void onCallChanged(Call call); } } diff --git a/InCallUI/src/com/android/incallui/InCallServiceImpl.java b/InCallUI/src/com/android/incallui/InCallServiceImpl.java index 1829e9306..3222392ff 100644 --- a/InCallUI/src/com/android/incallui/InCallServiceImpl.java +++ b/InCallUI/src/com/android/incallui/InCallServiceImpl.java @@ -17,13 +17,10 @@ package com.android.incallui; import android.telecomm.CallAudioState; -import android.telecomm.CallCapabilities; import android.telecomm.CallState; -import android.telecomm.GatewayInfo; import android.telecomm.InCallAdapter; import android.telecomm.InCallCall; import android.telecomm.InCallService; -import android.telephony.DisconnectCause; import com.google.common.collect.ImmutableList; @@ -66,7 +63,7 @@ public class InCallServiceImpl extends InCallService { Log.i(this, "addCall: " + call); if (call.getState() == Call.State.INCOMING) { - CallList.getInstance().onIncoming(call, EMPTY_RESPONSE_TEXTS); + CallList.getInstance().onIncoming(call, call.getCannedSmsResponses()); } else { CallList.getInstance().onUpdate(call); } @@ -120,6 +117,7 @@ public class InCallServiceImpl extends InCallService { private void updateCall(Call call, InCallCall telecommCall) { call.setHandle(telecommCall.getHandle()); call.setDisconnectCause(telecommCall.getDisconnectCauseCode()); + call.setCannedSmsResponses(telecommCall.getCannedSmsResponses()); call.setCapabilities(telecommCall.getCapabilities()); call.setConnectTimeMillis(telecommCall.getConnectTimeMillis()); call.setGatewayInfo(telecommCall.getGatewayInfo()); diff --git a/InCallUI/src/com/android/incallui/TelecommAdapter.java b/InCallUI/src/com/android/incallui/TelecommAdapter.java index f1dd50b80..6058858fd 100644 --- a/InCallUI/src/com/android/incallui/TelecommAdapter.java +++ b/InCallUI/src/com/android/incallui/TelecommAdapter.java @@ -51,8 +51,7 @@ final class TelecommAdapter { void rejectCall(String callId, boolean rejectWithMessage, String message) { if (mAdapter != null) { - // TODO(sail): Add support for reject with message. - mAdapter.rejectCall(callId); + mAdapter.rejectCall(callId, rejectWithMessage, message); } else { Log.e(this, "error rejectCall, mAdapter is null"); } -- cgit v1.2.3