From 31fe99856b34854bd36a17d02b774095dcfe51a6 Mon Sep 17 00:00:00 2001 From: Android Dialer Date: Mon, 26 Feb 2018 13:29:09 -0800 Subject: Updating PrimaryCallState value class to use AutoValue with builder pattern. Bug: 34502119 Test: BottomRowTest,CallCardPresenterTest,PrimaryCallStateTest,TopRowTest PiperOrigin-RevId: 187071451 Change-Id: Ib1b4baee397f61eade84bf1a887596dddc37230a --- java/com/android/incallui/CallCardPresenter.java | 63 ++--- .../incallui/answer/impl/AnswerFragment.java | 10 +- .../incallui/callpending/CallPendingActivity.java | 6 +- .../android/incallui/contactgrid/BottomRow.java | 18 +- .../incallui/contactgrid/ContactGridManager.java | 15 +- java/com/android/incallui/contactgrid/TopRow.java | 65 ++--- .../incallui/incall/impl/InCallFragment.java | 7 +- .../incallui/incall/protocol/PrimaryCallState.java | 261 ++++++++++++--------- .../android/incallui/rtt/impl/RttChatFragment.java | 4 +- 9 files changed, 247 insertions(+), 202 deletions(-) (limited to 'java') diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java index b945b0810..ad92f57c9 100644 --- a/java/com/android/incallui/CallCardPresenter.java +++ b/java/com/android/incallui/CallCardPresenter.java @@ -352,7 +352,7 @@ public class CallCardPresenter callState = this.primary.getState(); updatePrimaryCallState(); } else { - getUi().setCallState(PrimaryCallState.createEmptyPrimaryCallState()); + getUi().setCallState(PrimaryCallState.empty()); } maybeShowManageConferenceCallButton(); @@ -472,34 +472,39 @@ public class CallCardPresenter !VideoCallPresenter.showIncomingVideo(primary.getVideoState(), primary.getState()); getUi() .setCallState( - new PrimaryCallState( - primary.getState(), - primary.isVideoCall(), - primary.getVideoTech().getSessionModificationState(), - primary.getDisconnectCause(), - getConnectionLabel(), - getCallStateIcon(), - getGatewayNumber(), - shouldShowCallSubject(primary) ? primary.getCallSubject() : null, - PhoneNumberHelper.formatNumber( - primary.getCallbackNumber(), primary.getSimCountryIso()), - primary.hasProperty(Details.PROPERTY_WIFI), - primary.isConferenceCall() - && !primary.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE), - isWorkCall, - isAttemptingHdAudioCall, - isHdAudioCall, - !TextUtils.isEmpty(primary.getLastForwardedNumber()) || primary.isCallForwarded(), - shouldShowContactPhoto, - primary.getConnectTimeMillis(), - primary.isVoiceMailNumber(), - primary.isRemotelyHeld(), - isBusiness, - supports2ndCallOnHold(), - getSwapToSecondaryButtonState(), - primary.isAssistedDialed(), - null, - primary.getAssistedDialingExtras())); + PrimaryCallState.builder() + .setState(primary.getState()) + .setIsVideoCall(primary.isVideoCall()) + .setSessionModificationState(primary.getVideoTech().getSessionModificationState()) + .setDisconnectCause(primary.getDisconnectCause()) + .setConnectionLabel(getConnectionLabel()) + .setConnectionIcon(getCallStateIcon()) + .setGatewayNumber(getGatewayNumber()) + .setCallSubject(shouldShowCallSubject(primary) ? primary.getCallSubject() : null) + .setCallbackNumber( + PhoneNumberHelper.formatNumber( + primary.getCallbackNumber(), primary.getSimCountryIso())) + .setIsWifi(primary.hasProperty(Details.PROPERTY_WIFI)) + .setIsConference( + primary.isConferenceCall() + && !primary.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)) + .setIsWorkCall(isWorkCall) + .setIsHdAttempting(isAttemptingHdAudioCall) + .setIsHdAudioCall(isHdAudioCall) + .setIsForwardedNumber( + !TextUtils.isEmpty(primary.getLastForwardedNumber()) + || primary.isCallForwarded()) + .setShouldShowContactPhoto(shouldShowContactPhoto) + .setConnectTimeMillis(primary.getConnectTimeMillis()) + .setIsVoiceMailNumber(primary.isVoiceMailNumber()) + .setIsRemotelyHeld(primary.isRemotelyHeld()) + .setIsBusinessNumber(isBusiness) + .setSupportsCallOnHold(supports2ndCallOnHold()) + .setSwapToSecondaryButtonState(getSwapToSecondaryButtonState()) + .setIsAssistedDialed(primary.isAssistedDialed()) + .setCustomLabel(null) + .setAssistedDialingExtras(primary.getAssistedDialingExtras()) + .build()); InCallActivity activity = (InCallActivity) (inCallScreen.getInCallScreenFragment().getActivity()); diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java index 3439a3e3c..4729b41ba 100644 --- a/java/com/android/incallui/answer/impl/AnswerFragment.java +++ b/java/com/android/incallui/answer/impl/AnswerFragment.java @@ -858,7 +858,7 @@ public class AnswerFragment extends Fragment public void onAnswerProgressUpdate(@FloatRange(from = -1f, to = 1f) float answerProgress) { // Don't fade the window background for call waiting or video upgrades. Fading the background // shows the system wallpaper which looks bad because on reject we switch to another call. - if (primaryCallState.state == State.INCOMING && !isVideoCall()) { + if (primaryCallState.state() == State.INCOMING && !isVideoCall()) { answerScreenDelegate.updateWindowBackgroundColor(answerProgress); } @@ -969,7 +969,7 @@ public class AnswerFragment extends Fragment if (hasCallOnHold()) { getAnswerMethod() .setHintText(getText(R.string.call_incoming_default_label_answer_and_release_third)); - } else if (primaryCallState.supportsCallOnHold) { + } else if (primaryCallState.supportsCallOnHold()) { getAnswerMethod() .setHintText(getText(R.string.call_incoming_default_label_answer_and_release_second)); } @@ -1048,9 +1048,9 @@ public class AnswerFragment extends Fragment private boolean canRejectCallWithSms() { return primaryCallState != null - && !(primaryCallState.state == State.DISCONNECTED - || primaryCallState.state == State.DISCONNECTING - || primaryCallState.state == State.IDLE); + && !(primaryCallState.state() == State.DISCONNECTED + || primaryCallState.state() == State.DISCONNECTING + || primaryCallState.state() == State.IDLE); } private void createInCallScreenDelegate() { diff --git a/java/com/android/incallui/callpending/CallPendingActivity.java b/java/com/android/incallui/callpending/CallPendingActivity.java index 306eed8fb..c7ce2b108 100644 --- a/java/com/android/incallui/callpending/CallPendingActivity.java +++ b/java/com/android/incallui/callpending/CallPendingActivity.java @@ -147,8 +147,10 @@ public class CallPendingActivity extends FragmentActivity (InCallScreen) getSupportFragmentManager().findFragmentByTag(TAG_IN_CALL_SCREEN); inCallScreen.setPrimary(createPrimaryInfo()); inCallScreen.setCallState( - PrimaryCallState.createEmptyPrimaryCallStateWithState( - State.CALL_PENDING, getCallPendingLabel())); + PrimaryCallState.builder() + .setState(State.CALL_PENDING) + .setCustomLabel(getCallPendingLabel()) + .build()); inCallScreen.setEndCallButtonEnabled(true, true); } diff --git a/java/com/android/incallui/contactgrid/BottomRow.java b/java/com/android/incallui/contactgrid/BottomRow.java index 610eeca39..dc86d819b 100644 --- a/java/com/android/incallui/contactgrid/BottomRow.java +++ b/java/com/android/incallui/contactgrid/BottomRow.java @@ -74,11 +74,11 @@ public class BottomRow { public static Info getInfo(Context context, PrimaryCallState state, PrimaryInfo primaryInfo) { CharSequence label; - boolean isTimerVisible = state.state == State.ACTIVE; - boolean isForwardIconVisible = state.isForwardedNumber; - boolean isWorkIconVisible = state.isWorkCall; - boolean isHdIconVisible = state.isHdAudioCall && !isForwardIconVisible; - boolean isHdAttemptingIconVisible = state.isHdAttempting; + boolean isTimerVisible = state.state() == State.ACTIVE; + boolean isForwardIconVisible = state.isForwardedNumber(); + boolean isWorkIconVisible = state.isWorkCall(); + boolean isHdIconVisible = state.isHdAudioCall() && !isForwardIconVisible; + boolean isHdAttemptingIconVisible = state.isHdAttempting(); boolean isSpamIconVisible = false; boolean shouldPopulateAccessibilityEvent = true; @@ -86,14 +86,14 @@ public class BottomRow { label = context.getString(R.string.contact_grid_incoming_suspected_spam); isSpamIconVisible = true; isHdIconVisible = false; - } else if (state.state == State.DISCONNECTING) { + } else if (state.state() == State.DISCONNECTING) { // While in the DISCONNECTING state we display a "Hanging up" message in order to make the UI // feel more responsive. (In GSM it's normal to see a delay of a couple of seconds while // negotiating the disconnect with the network, so the "Hanging up" state at least lets the // user know that we're doing something. This state is currently not used with CDMA.) label = context.getString(R.string.incall_hanging_up); - } else if (state.state == State.DISCONNECTED) { - label = state.disconnectCause.getLabel(); + } else if (state.state() == State.DISCONNECTED) { + label = state.disconnectCause().getLabel(); if (TextUtils.isEmpty(label)) { label = context.getString(R.string.incall_call_ended); } @@ -134,6 +134,6 @@ public class BottomRow { } private static boolean isIncoming(PrimaryCallState state) { - return state.state == State.INCOMING || state.state == State.CALL_WAITING; + return state.state() == State.INCOMING || state.state() == State.CALL_WAITING; } } diff --git a/java/com/android/incallui/contactgrid/ContactGridManager.java b/java/com/android/incallui/contactgrid/ContactGridManager.java index 6dec7646f..1b76958dc 100644 --- a/java/com/android/incallui/contactgrid/ContactGridManager.java +++ b/java/com/android/incallui/contactgrid/ContactGridManager.java @@ -86,7 +86,7 @@ public class ContactGridManager { private final View deviceNumberDivider; private PrimaryInfo primaryInfo = PrimaryInfo.empty(); - private PrimaryCallState primaryCallState = PrimaryCallState.createEmptyPrimaryCallState(); + private PrimaryCallState primaryCallState = PrimaryCallState.empty(); private final LetterTileDrawable letterTile; private boolean isInMultiWindowMode; @@ -305,11 +305,11 @@ public class ContactGridManager { primaryInfo.contactInfoLookupKey(), LetterTileDrawable.SHAPE_CIRCLE, LetterTileDrawable.getContactTypeFromPrimitives( - primaryCallState.isVoiceMailNumber, + primaryCallState.isVoiceMailNumber(), primaryInfo.isSpam(), - primaryCallState.isBusinessNumber, + primaryCallState.isBusinessNumber(), primaryInfo.numberPresentation(), - primaryCallState.isConference)); + primaryCallState.isConference())); // By invalidating the avatarImageView we force a redraw of the letter tile. // This is required to properly display the updated letter tile iconography based on the // contact type, because the background drawable reference cached in the view, and the @@ -381,7 +381,7 @@ public class ContactGridManager { if (info.isTimerVisible) { bottomTextSwitcher.setDisplayedChild(1); bottomTimerView.setBase( - primaryCallState.connectTimeMillis + primaryCallState.connectTimeMillis() - System.currentTimeMillis() + SystemClock.elapsedRealtime()); if (!isTimerStarted) { @@ -404,14 +404,15 @@ public class ContactGridManager { if (deviceNumberTextView == null) { return; } - if (isInMultiWindowMode || TextUtils.isEmpty(primaryCallState.callbackNumber)) { + if (isInMultiWindowMode || TextUtils.isEmpty(primaryCallState.callbackNumber())) { deviceNumberTextView.setVisibility(View.GONE); deviceNumberDivider.setVisibility(View.GONE); return; } // This is used for carriers like Project Fi to show the callback number for emergency calls. deviceNumberTextView.setText( - context.getString(R.string.contact_grid_callback_number, primaryCallState.callbackNumber)); + context.getString( + R.string.contact_grid_callback_number, primaryCallState.callbackNumber())); deviceNumberTextView.setVisibility(View.VISIBLE); if (primaryInfo.shouldShowLocation()) { deviceNumberDivider.setVisibility(View.VISIBLE); diff --git a/java/com/android/incallui/contactgrid/TopRow.java b/java/com/android/incallui/contactgrid/TopRow.java index 5eb38f98c..f551092d4 100644 --- a/java/com/android/incallui/contactgrid/TopRow.java +++ b/java/com/android/incallui/contactgrid/TopRow.java @@ -62,19 +62,19 @@ public class TopRow { public static Info getInfo(Context context, PrimaryCallState state, PrimaryInfo primaryInfo) { CharSequence label = null; - Drawable icon = state.connectionIcon; + Drawable icon = state.connectionIcon(); boolean labelIsSingleLine = true; - if (state.isWifi && icon == null) { + if (state.isWifi() && icon == null) { icon = context.getDrawable(R.drawable.quantum_ic_network_wifi_vd_theme_24); } - if (state.state == State.INCOMING || state.state == State.CALL_WAITING) { + if (state.state() == State.INCOMING || state.state() == State.CALL_WAITING) { // Call from // [Wi-Fi icon] Video call from // Hey Jake, pick up! - if (!TextUtils.isEmpty(state.callSubject)) { - label = state.callSubject; + if (!TextUtils.isEmpty(state.callSubject())) { + label = state.callSubject(); labelIsSingleLine = false; } else { label = getLabelForIncoming(context, state); @@ -84,22 +84,22 @@ public class TopRow { label = TextUtils.concat(label, " ", spanDisplayNumber(primaryInfo.number())); } } - } else if (VideoUtils.hasSentVideoUpgradeRequest(state.sessionModificationState) - || VideoUtils.hasReceivedVideoUpgradeRequest(state.sessionModificationState)) { + } else if (VideoUtils.hasSentVideoUpgradeRequest(state.sessionModificationState()) + || VideoUtils.hasReceivedVideoUpgradeRequest(state.sessionModificationState())) { label = getLabelForVideoRequest(context, state); - } else if (state.state == State.PULLING) { + } else if (state.state() == State.PULLING) { label = context.getString(R.string.incall_transferring); - } else if (state.state == State.DIALING || state.state == State.CONNECTING) { + } else if (state.state() == State.DIALING || state.state() == State.CONNECTING) { // [Wi-Fi icon] Calling via Google Guest // Calling... label = getLabelForDialing(context, state); - } else if (state.state == State.ACTIVE && state.isRemotelyHeld) { + } else if (state.state() == State.ACTIVE && state.isRemotelyHeld()) { label = context.getString(R.string.incall_remotely_held); - } else if (state.state == State.ACTIVE + } else if (state.state() == State.ACTIVE && shouldShowNumber(primaryInfo, false /* isIncoming */)) { label = spanDisplayNumber(primaryInfo.number()); - } else if (state.state == State.CALL_PENDING && !TextUtils.isEmpty(state.customLabel)) { - label = state.customLabel; + } else if (state.state() == State.CALL_PENDING && !TextUtils.isEmpty(state.customLabel())) { + label = state.customLabel(); } else { // Video calling... // [Wi-Fi icon] Starbucks Wi-Fi @@ -133,13 +133,14 @@ public class TopRow { } private static CharSequence getLabelForIncoming(Context context, PrimaryCallState state) { - if (state.isVideoCall) { - return getLabelForIncomingVideo(context, state.sessionModificationState, state.isWifi); - } else if (state.isWifi && !TextUtils.isEmpty(state.connectionLabel)) { - return state.connectionLabel; + if (state.isVideoCall()) { + return getLabelForIncomingVideo(context, state.sessionModificationState(), state.isWifi()); + } else if (state.isWifi() && !TextUtils.isEmpty(state.connectionLabel())) { + return state.connectionLabel(); } else if (isAccount(state)) { - return context.getString(R.string.contact_grid_incoming_via_template, state.connectionLabel); - } else if (state.isWorkCall) { + return context.getString( + R.string.contact_grid_incoming_via_template, state.connectionLabel()); + } else if (state.isWorkCall()) { return context.getString(R.string.contact_grid_incoming_work_call); } else { return context.getString(R.string.contact_grid_incoming_voice_call); @@ -164,43 +165,43 @@ public class TopRow { } private static CharSequence getLabelForDialing(Context context, PrimaryCallState state) { - if (!TextUtils.isEmpty(state.connectionLabel) && !state.isWifi) { - return context.getString(R.string.incall_calling_via_template, state.connectionLabel); + if (!TextUtils.isEmpty(state.connectionLabel()) && !state.isWifi()) { + return context.getString(R.string.incall_calling_via_template, state.connectionLabel()); } else { - if (state.isVideoCall) { - if (state.isWifi) { + if (state.isVideoCall()) { + if (state.isWifi()) { return context.getString(R.string.incall_wifi_video_call_requesting); } else { return context.getString(R.string.incall_video_call_requesting); } } - if (state.isAssistedDialed && state.assistedDialingExtras != null) { + if (state.isAssistedDialed() && state.assistedDialingExtras() != null) { LogUtil.i("TopRow.getLabelForDialing", "using assisted dialing label."); String countryCode = - String.valueOf(state.assistedDialingExtras.transformedNumberCountryCallingCode()); + String.valueOf(state.assistedDialingExtras().transformedNumberCountryCallingCode()); return context.getString( R.string.incall_connecting_assited_dialed, countryCode, - state.assistedDialingExtras.userHomeCountryCode()); + state.assistedDialingExtras().userHomeCountryCode()); } return context.getString(R.string.incall_connecting); } } private static CharSequence getConnectionLabel(PrimaryCallState state) { - if (!TextUtils.isEmpty(state.connectionLabel) - && (isAccount(state) || state.isWifi || state.isConference)) { + if (!TextUtils.isEmpty(state.connectionLabel()) + && (isAccount(state) || state.isWifi() || state.isConference())) { // We normally don't show a "call state label" at all when active // (but we can use the call state label to display the provider name). - return state.connectionLabel; + return state.connectionLabel(); } else { return null; } } private static CharSequence getLabelForVideoRequest(Context context, PrimaryCallState state) { - switch (state.sessionModificationState) { + switch (state.sessionModificationState()) { case SessionModificationState.WAITING_FOR_UPGRADE_TO_VIDEO_RESPONSE: return context.getString(R.string.incall_video_call_upgrade_request); case SessionModificationState.REQUEST_FAILED: @@ -211,7 +212,7 @@ public class TopRow { case SessionModificationState.UPGRADE_TO_VIDEO_REQUEST_TIMED_OUT: return context.getString(R.string.incall_video_call_request_timed_out); case SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST: - return getLabelForIncomingVideo(context, state.sessionModificationState, state.isWifi); + return getLabelForIncomingVideo(context, state.sessionModificationState(), state.isWifi()); case SessionModificationState.NO_REQUEST: default: Assert.fail(); @@ -220,6 +221,6 @@ public class TopRow { } private static boolean isAccount(PrimaryCallState state) { - return !TextUtils.isEmpty(state.connectionLabel) && TextUtils.isEmpty(state.gatewayNumber); + return !TextUtils.isEmpty(state.connectionLabel()) && TextUtils.isEmpty(state.gatewayNumber()); } } diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java index 9a6d1c41e..29160abef 100644 --- a/java/com/android/incallui/incall/impl/InCallFragment.java +++ b/java/com/android/incallui/incall/impl/InCallFragment.java @@ -321,11 +321,12 @@ public class InCallFragment extends Fragment LogUtil.i("InCallFragment.setCallState", primaryCallState.toString()); contactGridManager.setCallState(primaryCallState); getButtonController(InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY) - .setAllowed(primaryCallState.swapToSecondaryButtonState != ButtonState.NOT_SUPPORT); + .setAllowed(primaryCallState.swapToSecondaryButtonState() != ButtonState.NOT_SUPPORT); getButtonController(InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY) - .setEnabled(primaryCallState.swapToSecondaryButtonState == ButtonState.ENABLED); + .setEnabled(primaryCallState.swapToSecondaryButtonState() == ButtonState.ENABLED); buttonChooser = - ButtonChooserFactory.newButtonChooser(voiceNetworkType, primaryCallState.isWifi, phoneType); + ButtonChooserFactory.newButtonChooser( + voiceNetworkType, primaryCallState.isWifi(), phoneType); updateButtonStates(); } diff --git a/java/com/android/incallui/incall/protocol/PrimaryCallState.java b/java/com/android/incallui/incall/protocol/PrimaryCallState.java index 7a3abedcd..1d536e9b9 100644 --- a/java/com/android/incallui/incall/protocol/PrimaryCallState.java +++ b/java/com/android/incallui/incall/protocol/PrimaryCallState.java @@ -26,12 +26,14 @@ import com.android.dialer.common.Assert; import com.android.incallui.call.DialerCall; import com.android.incallui.call.DialerCall.State; import com.android.incallui.videotech.utils.SessionModificationState; +import com.google.auto.value.AutoValue; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Locale; /** State of the primary call. */ -public class PrimaryCallState { +@AutoValue +public abstract class PrimaryCallState { /** * Button state that will be invisible if not supported, visible but invalid if disabled, or @@ -45,126 +47,159 @@ public class PrimaryCallState { int ENABLED = 2; } - public final int state; - public final boolean isVideoCall; - @SessionModificationState public final int sessionModificationState; - public final DisconnectCause disconnectCause; - public final String connectionLabel; - public final Drawable connectionIcon; - public final String gatewayNumber; - public final String callSubject; - public final String callbackNumber; - public final boolean isWifi; - public final boolean isConference; - public final boolean isWorkCall; - public final boolean isHdAttempting; - public final boolean isHdAudioCall; - public final boolean isForwardedNumber; - public final boolean shouldShowContactPhoto; - public final long connectTimeMillis; - public final boolean isVoiceMailNumber; - public final boolean isRemotelyHeld; - public final boolean isBusinessNumber; - public final boolean supportsCallOnHold; - public final @ButtonState int swapToSecondaryButtonState; - public final boolean isAssistedDialed; - @Nullable public final String customLabel; - @Nullable public final TransformationInfo assistedDialingExtras; - - // TODO: Convert to autovalue. a bug - public static PrimaryCallState createEmptyPrimaryCallState() { - return createEmptyPrimaryCallStateWithState(DialerCall.State.IDLE, null); - } + public abstract int state(); + + public abstract boolean isVideoCall(); + + @SessionModificationState + public abstract int sessionModificationState(); + + public abstract DisconnectCause disconnectCause(); + + @Nullable + public abstract String connectionLabel(); + + @Nullable + public abstract Drawable connectionIcon(); + + @Nullable + public abstract String gatewayNumber(); + + @Nullable + public abstract String callSubject(); + + @Nullable + public abstract String callbackNumber(); + + public abstract boolean isWifi(); + + public abstract boolean isConference(); + + public abstract boolean isWorkCall(); + + public abstract boolean isHdAttempting(); + + public abstract boolean isHdAudioCall(); - public static PrimaryCallState createEmptyPrimaryCallStateWithState( - int state, String customLabel) { - return new PrimaryCallState( - state, - false, /* isVideoCall */ - SessionModificationState.NO_REQUEST, - new DisconnectCause(DisconnectCause.UNKNOWN), - null, /* connectionLabel */ - null, /* connectionIcon */ - null, /* gatewayNumber */ - null, /* callSubject */ - null, /* callbackNumber */ - false /* isWifi */, - false /* isConference */, - false /* isWorkCall */, - false /* isHdAttempting */, - false /* isHdAudioCall */, - false /* isForwardedNumber */, - false /* shouldShowContactPhoto */, - 0, - false /* isVoiceMailNumber */, - false /* isRemotelyHeld */, - false /* isBusinessNumber */, - true /* supportsCallOnHold */, - ButtonState.NOT_SUPPORT /* swapToSecondaryButtonState */, - false /* isAssistedDialed */, - customLabel, - null /* assistedDialingExtras */); + public abstract boolean isForwardedNumber(); + + public abstract boolean shouldShowContactPhoto(); + + public abstract long connectTimeMillis(); + + public abstract boolean isVoiceMailNumber(); + + public abstract boolean isRemotelyHeld(); + + public abstract boolean isBusinessNumber(); + + public abstract boolean supportsCallOnHold(); + + public abstract @ButtonState int swapToSecondaryButtonState(); + + public abstract boolean isAssistedDialed(); + + @Nullable + public abstract String customLabel(); + + @Nullable + public abstract TransformationInfo assistedDialingExtras(); + + public static Builder builder() { + return new AutoValue_PrimaryCallState.Builder() + .setState(DialerCall.State.IDLE) + .setIsVideoCall(false) + .setSessionModificationState(SessionModificationState.NO_REQUEST) + .setDisconnectCause(new DisconnectCause(DisconnectCause.UNKNOWN)) + .setIsWifi(false) + .setIsConference(false) + .setIsWorkCall(false) + .setIsHdAttempting(false) + .setIsHdAudioCall(false) + .setIsForwardedNumber(false) + .setShouldShowContactPhoto(false) + .setConnectTimeMillis(0) + .setIsVoiceMailNumber(false) + .setIsRemotelyHeld(false) + .setIsBusinessNumber(false) + .setSupportsCallOnHold(true) + .setSwapToSecondaryButtonState(ButtonState.NOT_SUPPORT) + .setIsAssistedDialed(false); } - public PrimaryCallState( - int state, - boolean isVideoCall, - @SessionModificationState int sessionModificationState, - DisconnectCause disconnectCause, - String connectionLabel, - Drawable connectionIcon, - String gatewayNumber, - String callSubject, - String callbackNumber, - boolean isWifi, - boolean isConference, - boolean isWorkCall, - boolean isHdAttempting, - boolean isHdAudioCall, - boolean isForwardedNumber, - boolean shouldShowContactPhoto, - long connectTimeMillis, - boolean isVoiceMailNumber, - boolean isRemotelyHeld, - boolean isBusinessNumber, - boolean supportsCallOnHold, - @ButtonState int swapToSecondaryButtonState, - boolean isAssistedDialed, - @Nullable String customLabel, - @Nullable TransformationInfo assistedDialingExtras) { - this.state = state; - this.isVideoCall = isVideoCall; - this.sessionModificationState = sessionModificationState; - this.disconnectCause = disconnectCause; - this.connectionLabel = connectionLabel; - this.connectionIcon = connectionIcon; - this.gatewayNumber = gatewayNumber; - this.callSubject = callSubject; - this.callbackNumber = callbackNumber; - this.isWifi = isWifi; - this.isConference = isConference; - this.isWorkCall = isWorkCall; - this.isHdAttempting = isHdAttempting; - this.isHdAudioCall = isHdAudioCall; - this.isForwardedNumber = isForwardedNumber; - this.shouldShowContactPhoto = shouldShowContactPhoto; - this.connectTimeMillis = connectTimeMillis; - this.isVoiceMailNumber = isVoiceMailNumber; - this.isRemotelyHeld = isRemotelyHeld; - this.isBusinessNumber = isBusinessNumber; - this.supportsCallOnHold = supportsCallOnHold; - this.swapToSecondaryButtonState = swapToSecondaryButtonState; - this.isAssistedDialed = isAssistedDialed; - if (!TextUtils.isEmpty(customLabel)) { - Assert.checkArgument(state == State.CALL_PENDING); + /** Builder class for primary call state info. */ + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder setState(int state); + + public abstract Builder setIsVideoCall(boolean isVideoCall); + + public abstract Builder setSessionModificationState( + @SessionModificationState int sessionModificationState); + + public abstract Builder setDisconnectCause(DisconnectCause disconnectCause); + + public abstract Builder setConnectionLabel(String connectionLabel); + + public abstract Builder setConnectionIcon(Drawable connectionIcon); + + public abstract Builder setGatewayNumber(String gatewayNumber); + + public abstract Builder setCallSubject(String callSubject); + + public abstract Builder setCallbackNumber(String callbackNumber); + + public abstract Builder setIsWifi(boolean isWifi); + + public abstract Builder setIsConference(boolean isConference); + + public abstract Builder setIsWorkCall(boolean isWorkCall); + + public abstract Builder setIsHdAttempting(boolean isHdAttempting); + + public abstract Builder setIsHdAudioCall(boolean isHdAudioCall); + + public abstract Builder setIsForwardedNumber(boolean isForwardedNumber); + + public abstract Builder setShouldShowContactPhoto(boolean shouldShowContactPhoto); + + public abstract Builder setConnectTimeMillis(long connectTimeMillis); + + public abstract Builder setIsVoiceMailNumber(boolean isVoiceMailNumber); + + public abstract Builder setIsRemotelyHeld(boolean isRemotelyHeld); + + public abstract Builder setIsBusinessNumber(boolean isBusinessNumber); + + public abstract Builder setSupportsCallOnHold(boolean supportsCallOnHold); + + public abstract Builder setSwapToSecondaryButtonState( + @ButtonState int swapToSecondaryButtonState); + + public abstract Builder setIsAssistedDialed(boolean isAssistedDialed); + + public abstract Builder setCustomLabel(String customLabel); + + public abstract Builder setAssistedDialingExtras(TransformationInfo assistedDialingExtras); + + abstract PrimaryCallState autoBuild(); + + public PrimaryCallState build() { + PrimaryCallState primaryCallState = autoBuild(); + if (!TextUtils.isEmpty(primaryCallState.customLabel())) { + Assert.checkArgument(primaryCallState.state() == State.CALL_PENDING); + } + return primaryCallState; } - this.customLabel = customLabel; - this.assistedDialingExtras = assistedDialingExtras; + } + + public static PrimaryCallState empty() { + return PrimaryCallState.builder().build(); } @Override public String toString() { return String.format( - Locale.US, "PrimaryCallState, state: %d, connectionLabel: %s", state, connectionLabel); + Locale.US, "PrimaryCallState, state: %d, connectionLabel: %s", state(), connectionLabel()); } } diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java index 2c8de09f4..deb205ce6 100644 --- a/java/com/android/incallui/rtt/impl/RttChatFragment.java +++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java @@ -288,11 +288,11 @@ public class RttChatFragment extends Fragment @Override public void setCallState(@NonNull PrimaryCallState primaryCallState) { LogUtil.i("RttChatFragment.setCallState", primaryCallState.toString()); - if (!isTimerStarted && primaryCallState.state == State.ACTIVE) { + if (!isTimerStarted && primaryCallState.state() == State.ACTIVE) { LogUtil.i( "RttChatFragment.setCallState", "starting timer with base: %d", chronometer.getBase()); chronometer.setBase( - primaryCallState.connectTimeMillis + primaryCallState.connectTimeMillis() - System.currentTimeMillis() + SystemClock.elapsedRealtime()); chronometer.start(); -- cgit v1.2.3