1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.incallui.incall.protocol; 18 19 import android.graphics.drawable.Drawable; 20 import android.support.annotation.IntDef; 21 import android.support.annotation.Nullable; 22 import android.telecom.DisconnectCause; 23 import android.text.TextUtils; 24 import com.android.dialer.assisteddialing.TransformationInfo; 25 import com.android.dialer.common.Assert; 26 import com.android.incallui.call.DialerCall; 27 import com.android.incallui.call.DialerCall.State; 28 import com.android.incallui.videotech.utils.SessionModificationState; 29 import com.google.auto.value.AutoValue; 30 import java.lang.annotation.Retention; 31 import java.lang.annotation.RetentionPolicy; 32 import java.util.Locale; 33 34 /** State of the primary call. */ 35 @AutoValue 36 public abstract class PrimaryCallState { 37 38 /** 39 * Button state that will be invisible if not supported, visible but invalid if disabled, or 40 * visible if enabled. 41 */ 42 @Retention(RetentionPolicy.SOURCE) 43 @IntDef({ButtonState.NOT_SUPPORT, ButtonState.DISABLED, ButtonState.ENABLED}) 44 public @interface ButtonState { 45 int NOT_SUPPORT = 0; 46 int DISABLED = 1; 47 int ENABLED = 2; 48 } 49 state()50 public abstract int state(); 51 isVideoCall()52 public abstract boolean isVideoCall(); 53 54 @SessionModificationState sessionModificationState()55 public abstract int sessionModificationState(); 56 disconnectCause()57 public abstract DisconnectCause disconnectCause(); 58 59 @Nullable connectionLabel()60 public abstract String connectionLabel(); 61 62 @Nullable connectionIcon()63 public abstract Drawable connectionIcon(); 64 65 @Nullable gatewayNumber()66 public abstract String gatewayNumber(); 67 68 @Nullable callSubject()69 public abstract String callSubject(); 70 71 @Nullable callbackNumber()72 public abstract String callbackNumber(); 73 isWifi()74 public abstract boolean isWifi(); 75 isConference()76 public abstract boolean isConference(); 77 isWorkCall()78 public abstract boolean isWorkCall(); 79 isHdAttempting()80 public abstract boolean isHdAttempting(); 81 isHdAudioCall()82 public abstract boolean isHdAudioCall(); 83 isForwardedNumber()84 public abstract boolean isForwardedNumber(); 85 shouldShowContactPhoto()86 public abstract boolean shouldShowContactPhoto(); 87 connectTimeMillis()88 public abstract long connectTimeMillis(); 89 isVoiceMailNumber()90 public abstract boolean isVoiceMailNumber(); 91 isRemotelyHeld()92 public abstract boolean isRemotelyHeld(); 93 isBusinessNumber()94 public abstract boolean isBusinessNumber(); 95 supportsCallOnHold()96 public abstract boolean supportsCallOnHold(); 97 swapToSecondaryButtonState()98 public abstract @ButtonState int swapToSecondaryButtonState(); 99 isAssistedDialed()100 public abstract boolean isAssistedDialed(); 101 102 @Nullable customLabel()103 public abstract String customLabel(); 104 105 @Nullable assistedDialingExtras()106 public abstract TransformationInfo assistedDialingExtras(); 107 builder()108 public static Builder builder() { 109 return new AutoValue_PrimaryCallState.Builder() 110 .setState(DialerCall.State.IDLE) 111 .setIsVideoCall(false) 112 .setSessionModificationState(SessionModificationState.NO_REQUEST) 113 .setDisconnectCause(new DisconnectCause(DisconnectCause.UNKNOWN)) 114 .setIsWifi(false) 115 .setIsConference(false) 116 .setIsWorkCall(false) 117 .setIsHdAttempting(false) 118 .setIsHdAudioCall(false) 119 .setIsForwardedNumber(false) 120 .setShouldShowContactPhoto(false) 121 .setConnectTimeMillis(0) 122 .setIsVoiceMailNumber(false) 123 .setIsRemotelyHeld(false) 124 .setIsBusinessNumber(false) 125 .setSupportsCallOnHold(true) 126 .setSwapToSecondaryButtonState(ButtonState.NOT_SUPPORT) 127 .setIsAssistedDialed(false); 128 } 129 130 /** Builder class for primary call state info. */ 131 @AutoValue.Builder 132 public abstract static class Builder { setState(int state)133 public abstract Builder setState(int state); 134 setIsVideoCall(boolean isVideoCall)135 public abstract Builder setIsVideoCall(boolean isVideoCall); 136 setSessionModificationState( @essionModificationState int sessionModificationState)137 public abstract Builder setSessionModificationState( 138 @SessionModificationState int sessionModificationState); 139 setDisconnectCause(DisconnectCause disconnectCause)140 public abstract Builder setDisconnectCause(DisconnectCause disconnectCause); 141 setConnectionLabel(String connectionLabel)142 public abstract Builder setConnectionLabel(String connectionLabel); 143 setConnectionIcon(Drawable connectionIcon)144 public abstract Builder setConnectionIcon(Drawable connectionIcon); 145 setGatewayNumber(String gatewayNumber)146 public abstract Builder setGatewayNumber(String gatewayNumber); 147 setCallSubject(String callSubject)148 public abstract Builder setCallSubject(String callSubject); 149 setCallbackNumber(String callbackNumber)150 public abstract Builder setCallbackNumber(String callbackNumber); 151 setIsWifi(boolean isWifi)152 public abstract Builder setIsWifi(boolean isWifi); 153 setIsConference(boolean isConference)154 public abstract Builder setIsConference(boolean isConference); 155 setIsWorkCall(boolean isWorkCall)156 public abstract Builder setIsWorkCall(boolean isWorkCall); 157 setIsHdAttempting(boolean isHdAttempting)158 public abstract Builder setIsHdAttempting(boolean isHdAttempting); 159 setIsHdAudioCall(boolean isHdAudioCall)160 public abstract Builder setIsHdAudioCall(boolean isHdAudioCall); 161 setIsForwardedNumber(boolean isForwardedNumber)162 public abstract Builder setIsForwardedNumber(boolean isForwardedNumber); 163 setShouldShowContactPhoto(boolean shouldShowContactPhoto)164 public abstract Builder setShouldShowContactPhoto(boolean shouldShowContactPhoto); 165 setConnectTimeMillis(long connectTimeMillis)166 public abstract Builder setConnectTimeMillis(long connectTimeMillis); 167 setIsVoiceMailNumber(boolean isVoiceMailNumber)168 public abstract Builder setIsVoiceMailNumber(boolean isVoiceMailNumber); 169 setIsRemotelyHeld(boolean isRemotelyHeld)170 public abstract Builder setIsRemotelyHeld(boolean isRemotelyHeld); 171 setIsBusinessNumber(boolean isBusinessNumber)172 public abstract Builder setIsBusinessNumber(boolean isBusinessNumber); 173 setSupportsCallOnHold(boolean supportsCallOnHold)174 public abstract Builder setSupportsCallOnHold(boolean supportsCallOnHold); 175 setSwapToSecondaryButtonState( @uttonState int swapToSecondaryButtonState)176 public abstract Builder setSwapToSecondaryButtonState( 177 @ButtonState int swapToSecondaryButtonState); 178 setIsAssistedDialed(boolean isAssistedDialed)179 public abstract Builder setIsAssistedDialed(boolean isAssistedDialed); 180 setCustomLabel(String customLabel)181 public abstract Builder setCustomLabel(String customLabel); 182 setAssistedDialingExtras(TransformationInfo assistedDialingExtras)183 public abstract Builder setAssistedDialingExtras(TransformationInfo assistedDialingExtras); 184 autoBuild()185 abstract PrimaryCallState autoBuild(); 186 build()187 public PrimaryCallState build() { 188 PrimaryCallState primaryCallState = autoBuild(); 189 if (!TextUtils.isEmpty(primaryCallState.customLabel())) { 190 Assert.checkArgument(primaryCallState.state() == State.CALL_PENDING); 191 } 192 return primaryCallState; 193 } 194 } 195 empty()196 public static PrimaryCallState empty() { 197 return PrimaryCallState.builder().build(); 198 } 199 200 @Override toString()201 public String toString() { 202 return String.format( 203 Locale.US, "PrimaryCallState, state: %d, connectionLabel: %s", state(), connectionLabel()); 204 } 205 } 206