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.dialer.enrichedcall;
18 
19 import android.support.annotation.IntDef;
20 import android.support.annotation.NonNull;
21 import android.support.annotation.Nullable;
22 import com.android.dialer.multimedia.MultimediaData;
23 import java.lang.annotation.Retention;
24 import java.lang.annotation.RetentionPolicy;
25 
26 /** Holds state information and data about enriched calling sessions. */
27 public interface Session {
28 
29   /** Possible states for call composer sessions. */
30   @Retention(RetentionPolicy.SOURCE)
31   @IntDef({
32     STATE_NONE,
33     STATE_STARTING,
34     STATE_STARTED,
35     STATE_START_FAILED,
36     STATE_MESSAGE_SENT,
37     STATE_MESSAGE_FAILED,
38     STATE_CLOSED,
39   })
40   @interface State {}
41 
42   int STATE_NONE = 0;
43   int STATE_STARTING = STATE_NONE + 1;
44   int STATE_STARTED = STATE_STARTING + 1;
45   int STATE_START_FAILED = STATE_STARTED + 1;
46   int STATE_MESSAGE_SENT = STATE_START_FAILED + 1;
47   int STATE_MESSAGE_FAILED = STATE_MESSAGE_SENT + 1;
48   int STATE_CLOSED = STATE_MESSAGE_FAILED + 1;
49 
50   /** Id used for sessions that fail to start. */
51   long NO_SESSION_ID = -1;
52 
53   /**
54    * An id for the specific case when sending a message fails so early that a message id isn't
55    * created.
56    */
57   String MESSAGE_ID_COULD_NOT_CREATE_ID = "messageIdCouldNotCreateId";
58 
59   /**
60    * Returns the id associated with this session, or {@link #NO_SESSION_ID} if this represents a
61    * session that failed to start.
62    */
getSessionId()63   long getSessionId();
64 
65   /** Returns the id of the dialer call associated with this session, or null if there isn't one. */
66   @Nullable
getUniqueDialerCallId()67   String getUniqueDialerCallId();
68 
setUniqueDialerCallId(@onNull String id)69   void setUniqueDialerCallId(@NonNull String id);
70 
71   /** Returns the number associated with the remote end of this session. */
72   @NonNull
getRemoteNumber()73   String getRemoteNumber();
74 
75   /** Returns the {@link State} for this session. */
76   @State
getState()77   int getState();
78 
79   /** Returns the {@link MultimediaData} associated with this session. */
80   @NonNull
getMultimediaData()81   MultimediaData getMultimediaData();
82 
83   /** Returns type of this session, based on some arbitrarily defined type. */
getType()84   int getType();
85 
86   /**
87    * Sets the {@link MultimediaData} for this session.
88    *
89    *
90    * @throws IllegalArgumentException if the type is invalid
91    */
setSessionData(@onNull MultimediaData multimediaData, int type)92   void setSessionData(@NonNull MultimediaData multimediaData, int type);
93 }
94