Home | History | Annotate | Download | only in protocol
      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 
     50   public abstract int state();
     51 
     52   public abstract boolean isVideoCall();
     53 
     54   @SessionModificationState
     55   public abstract int sessionModificationState();
     56 
     57   public abstract DisconnectCause disconnectCause();
     58 
     59   @Nullable
     60   public abstract String connectionLabel();
     61 
     62   @Nullable
     63   public abstract Drawable connectionIcon();
     64 
     65   @Nullable
     66   public abstract String gatewayNumber();
     67 
     68   @Nullable
     69   public abstract String callSubject();
     70 
     71   @Nullable
     72   public abstract String callbackNumber();
     73 
     74   public abstract boolean isWifi();
     75 
     76   public abstract boolean isConference();
     77 
     78   public abstract boolean isWorkCall();
     79 
     80   public abstract boolean isHdAttempting();
     81 
     82   public abstract boolean isHdAudioCall();
     83 
     84   public abstract boolean isForwardedNumber();
     85 
     86   public abstract boolean shouldShowContactPhoto();
     87 
     88   public abstract long connectTimeMillis();
     89 
     90   public abstract boolean isVoiceMailNumber();
     91 
     92   public abstract boolean isRemotelyHeld();
     93 
     94   public abstract boolean isBusinessNumber();
     95 
     96   public abstract boolean supportsCallOnHold();
     97 
     98   public abstract @ButtonState int swapToSecondaryButtonState();
     99 
    100   public abstract boolean isAssistedDialed();
    101 
    102   @Nullable
    103   public abstract String customLabel();
    104 
    105   @Nullable
    106   public abstract TransformationInfo assistedDialingExtras();
    107 
    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 {
    133     public abstract Builder setState(int state);
    134 
    135     public abstract Builder setIsVideoCall(boolean isVideoCall);
    136 
    137     public abstract Builder setSessionModificationState(
    138         @SessionModificationState int sessionModificationState);
    139 
    140     public abstract Builder setDisconnectCause(DisconnectCause disconnectCause);
    141 
    142     public abstract Builder setConnectionLabel(String connectionLabel);
    143 
    144     public abstract Builder setConnectionIcon(Drawable connectionIcon);
    145 
    146     public abstract Builder setGatewayNumber(String gatewayNumber);
    147 
    148     public abstract Builder setCallSubject(String callSubject);
    149 
    150     public abstract Builder setCallbackNumber(String callbackNumber);
    151 
    152     public abstract Builder setIsWifi(boolean isWifi);
    153 
    154     public abstract Builder setIsConference(boolean isConference);
    155 
    156     public abstract Builder setIsWorkCall(boolean isWorkCall);
    157 
    158     public abstract Builder setIsHdAttempting(boolean isHdAttempting);
    159 
    160     public abstract Builder setIsHdAudioCall(boolean isHdAudioCall);
    161 
    162     public abstract Builder setIsForwardedNumber(boolean isForwardedNumber);
    163 
    164     public abstract Builder setShouldShowContactPhoto(boolean shouldShowContactPhoto);
    165 
    166     public abstract Builder setConnectTimeMillis(long connectTimeMillis);
    167 
    168     public abstract Builder setIsVoiceMailNumber(boolean isVoiceMailNumber);
    169 
    170     public abstract Builder setIsRemotelyHeld(boolean isRemotelyHeld);
    171 
    172     public abstract Builder setIsBusinessNumber(boolean isBusinessNumber);
    173 
    174     public abstract Builder setSupportsCallOnHold(boolean supportsCallOnHold);
    175 
    176     public abstract Builder setSwapToSecondaryButtonState(
    177         @ButtonState int swapToSecondaryButtonState);
    178 
    179     public abstract Builder setIsAssistedDialed(boolean isAssistedDialed);
    180 
    181     public abstract Builder setCustomLabel(String customLabel);
    182 
    183     public abstract Builder setAssistedDialingExtras(TransformationInfo assistedDialingExtras);
    184 
    185     abstract PrimaryCallState autoBuild();
    186 
    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 
    196   public static PrimaryCallState empty() {
    197     return PrimaryCallState.builder().build();
    198   }
    199 
    200   @Override
    201   public String toString() {
    202     return String.format(
    203         Locale.US, "PrimaryCallState, state: %d, connectionLabel: %s", state(), connectionLabel());
    204   }
    205 }
    206