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.ColorInt; 21 import android.support.annotation.IntDef; 22 import android.support.annotation.Nullable; 23 import android.telecom.DisconnectCause; 24 import android.text.TextUtils; 25 import com.android.dialer.assisteddialing.TransformationInfo; 26 import com.android.dialer.common.Assert; 27 import com.android.dialer.preferredsim.suggestion.SuggestionProvider; 28 import com.android.incallui.call.state.DialerCallState; 29 import com.android.incallui.videotech.utils.SessionModificationState; 30 import com.google.auto.value.AutoValue; 31 import java.lang.annotation.Retention; 32 import java.lang.annotation.RetentionPolicy; 33 import java.util.Locale; 34 35 /** State of the primary call. */ 36 @AutoValue 37 public abstract class PrimaryCallState { 38 39 /** 40 * Button state that will be invisible if not supported, visible but invalid if disabled, or 41 * visible if enabled. 42 */ 43 @Retention(RetentionPolicy.SOURCE) 44 @IntDef({ButtonState.NOT_SUPPORT, ButtonState.DISABLED, ButtonState.ENABLED}) 45 public @interface ButtonState { 46 int NOT_SUPPORT = 0; 47 int DISABLED = 1; 48 int ENABLED = 2; 49 } 50 state()51 public abstract int state(); 52 isVideoCall()53 public abstract boolean isVideoCall(); 54 55 @SessionModificationState sessionModificationState()56 public abstract int sessionModificationState(); 57 disconnectCause()58 public abstract DisconnectCause disconnectCause(); 59 60 @Nullable connectionLabel()61 public abstract String connectionLabel(); 62 primaryColor()63 public abstract @ColorInt int primaryColor(); 64 65 @Nullable simSuggestionReason()66 public abstract SuggestionProvider.Reason simSuggestionReason(); 67 68 @Nullable connectionIcon()69 public abstract Drawable connectionIcon(); 70 71 @Nullable gatewayNumber()72 public abstract String gatewayNumber(); 73 74 @Nullable callSubject()75 public abstract String callSubject(); 76 77 @Nullable callbackNumber()78 public abstract String callbackNumber(); 79 isWifi()80 public abstract boolean isWifi(); 81 isConference()82 public abstract boolean isConference(); 83 isWorkCall()84 public abstract boolean isWorkCall(); 85 isHdAttempting()86 public abstract boolean isHdAttempting(); 87 isHdAudioCall()88 public abstract boolean isHdAudioCall(); 89 isForwardedNumber()90 public abstract boolean isForwardedNumber(); 91 shouldShowContactPhoto()92 public abstract boolean shouldShowContactPhoto(); 93 connectTimeMillis()94 public abstract long connectTimeMillis(); 95 isVoiceMailNumber()96 public abstract boolean isVoiceMailNumber(); 97 isRemotelyHeld()98 public abstract boolean isRemotelyHeld(); 99 isBusinessNumber()100 public abstract boolean isBusinessNumber(); 101 supportsCallOnHold()102 public abstract boolean supportsCallOnHold(); 103 swapToSecondaryButtonState()104 public abstract @ButtonState int swapToSecondaryButtonState(); 105 isAssistedDialed()106 public abstract boolean isAssistedDialed(); 107 108 @Nullable customLabel()109 public abstract String customLabel(); 110 111 @Nullable assistedDialingExtras()112 public abstract TransformationInfo assistedDialingExtras(); 113 builder()114 public static Builder builder() { 115 return new AutoValue_PrimaryCallState.Builder() 116 .setState(DialerCallState.IDLE) 117 .setIsVideoCall(false) 118 .setSessionModificationState(SessionModificationState.NO_REQUEST) 119 .setDisconnectCause(new DisconnectCause(DisconnectCause.UNKNOWN)) 120 .setIsWifi(false) 121 .setIsConference(false) 122 .setIsWorkCall(false) 123 .setIsHdAttempting(false) 124 .setIsHdAudioCall(false) 125 .setIsForwardedNumber(false) 126 .setShouldShowContactPhoto(false) 127 .setConnectTimeMillis(0) 128 .setIsVoiceMailNumber(false) 129 .setIsRemotelyHeld(false) 130 .setIsBusinessNumber(false) 131 .setSupportsCallOnHold(true) 132 .setSwapToSecondaryButtonState(ButtonState.NOT_SUPPORT) 133 .setIsAssistedDialed(false) 134 .setPrimaryColor(0); 135 } 136 137 /** Builder class for primary call state info. */ 138 @AutoValue.Builder 139 public abstract static class Builder { setState(int state)140 public abstract Builder setState(int state); 141 setIsVideoCall(boolean isVideoCall)142 public abstract Builder setIsVideoCall(boolean isVideoCall); 143 setSessionModificationState( @essionModificationState int sessionModificationState)144 public abstract Builder setSessionModificationState( 145 @SessionModificationState int sessionModificationState); 146 setDisconnectCause(DisconnectCause disconnectCause)147 public abstract Builder setDisconnectCause(DisconnectCause disconnectCause); 148 setConnectionLabel(String connectionLabel)149 public abstract Builder setConnectionLabel(String connectionLabel); 150 setSimSuggestionReason(SuggestionProvider.Reason reason)151 public abstract Builder setSimSuggestionReason(SuggestionProvider.Reason reason); 152 setConnectionIcon(Drawable connectionIcon)153 public abstract Builder setConnectionIcon(Drawable connectionIcon); 154 setPrimaryColor(@olorInt int color)155 public abstract Builder setPrimaryColor(@ColorInt int color); 156 setGatewayNumber(String gatewayNumber)157 public abstract Builder setGatewayNumber(String gatewayNumber); 158 setCallSubject(String callSubject)159 public abstract Builder setCallSubject(String callSubject); 160 setCallbackNumber(String callbackNumber)161 public abstract Builder setCallbackNumber(String callbackNumber); 162 setIsWifi(boolean isWifi)163 public abstract Builder setIsWifi(boolean isWifi); 164 setIsConference(boolean isConference)165 public abstract Builder setIsConference(boolean isConference); 166 setIsWorkCall(boolean isWorkCall)167 public abstract Builder setIsWorkCall(boolean isWorkCall); 168 setIsHdAttempting(boolean isHdAttempting)169 public abstract Builder setIsHdAttempting(boolean isHdAttempting); 170 setIsHdAudioCall(boolean isHdAudioCall)171 public abstract Builder setIsHdAudioCall(boolean isHdAudioCall); 172 setIsForwardedNumber(boolean isForwardedNumber)173 public abstract Builder setIsForwardedNumber(boolean isForwardedNumber); 174 setShouldShowContactPhoto(boolean shouldShowContactPhoto)175 public abstract Builder setShouldShowContactPhoto(boolean shouldShowContactPhoto); 176 setConnectTimeMillis(long connectTimeMillis)177 public abstract Builder setConnectTimeMillis(long connectTimeMillis); 178 setIsVoiceMailNumber(boolean isVoiceMailNumber)179 public abstract Builder setIsVoiceMailNumber(boolean isVoiceMailNumber); 180 setIsRemotelyHeld(boolean isRemotelyHeld)181 public abstract Builder setIsRemotelyHeld(boolean isRemotelyHeld); 182 setIsBusinessNumber(boolean isBusinessNumber)183 public abstract Builder setIsBusinessNumber(boolean isBusinessNumber); 184 setSupportsCallOnHold(boolean supportsCallOnHold)185 public abstract Builder setSupportsCallOnHold(boolean supportsCallOnHold); 186 setSwapToSecondaryButtonState( @uttonState int swapToSecondaryButtonState)187 public abstract Builder setSwapToSecondaryButtonState( 188 @ButtonState int swapToSecondaryButtonState); 189 setIsAssistedDialed(boolean isAssistedDialed)190 public abstract Builder setIsAssistedDialed(boolean isAssistedDialed); 191 setCustomLabel(String customLabel)192 public abstract Builder setCustomLabel(String customLabel); 193 setAssistedDialingExtras(TransformationInfo assistedDialingExtras)194 public abstract Builder setAssistedDialingExtras(TransformationInfo assistedDialingExtras); 195 autoBuild()196 abstract PrimaryCallState autoBuild(); 197 build()198 public PrimaryCallState build() { 199 PrimaryCallState primaryCallState = autoBuild(); 200 if (!TextUtils.isEmpty(primaryCallState.customLabel())) { 201 Assert.checkArgument(primaryCallState.state() == DialerCallState.CALL_PENDING); 202 } 203 return primaryCallState; 204 } 205 } 206 empty()207 public static PrimaryCallState empty() { 208 return PrimaryCallState.builder().build(); 209 } 210 211 @Override toString()212 public String toString() { 213 return String.format( 214 Locale.US, "PrimaryCallState, state: %d, connectionLabel: %s", state(), connectionLabel()); 215 } 216 } 217