• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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