1 /*
2  * Copyright (C) 2017 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 android.telephony.mbms;
18 
19 import android.annotation.IntDef;
20 import android.telephony.MbmsStreamingSession;
21 
22 import java.lang.annotation.Retention;
23 import java.lang.annotation.RetentionPolicy;
24 
25 public class MbmsErrors {
26     /**
27      * Indicates that the middleware has sent an error code that is not defined in the version of
28      * the SDK targeted by your app. This is an illegal value for the middleware to return -- it
29      * should only ever be generated by the framework.
30      */
31     public static final int UNKNOWN = -1;
32 
33     /** Indicates that the operation was successful. */
34     public static final int SUCCESS = 0;
35 
36     // Following errors are generated in the manager and should not be returned from the
37     // middleware
38     /**
39      * Indicates that either no MBMS middleware app is installed on the device or multiple
40      * middleware apps are installed on the device.
41      */
42     public static final int ERROR_NO_UNIQUE_MIDDLEWARE = 1;
43 
44     /**
45      * Indicates that the app attempted to perform an operation on an instance of
46      * {@link android.telephony.MbmsDownloadSession} or
47      * {@link MbmsStreamingSession} without being bound to the middleware.
48      */
49     public static final int ERROR_MIDDLEWARE_NOT_BOUND = 2;
50 
51     /** Indicates that the middleware has died and the requested operation was not completed.*/
52     public static final int ERROR_MIDDLEWARE_LOST = 3;
53 
54     /**
55      * Indicates errors that may be generated during initialization by the
56      * middleware. They are applicable to both streaming and file-download use-cases.
57      */
58     public static class InitializationErrors {
InitializationErrors()59         private InitializationErrors() {}
60         /**
61          * Indicates that the app tried to create more than one instance each of
62          * {@link MbmsStreamingSession} or {@link android.telephony.MbmsDownloadSession}.
63          */
64         public static final int ERROR_DUPLICATE_INITIALIZE = 101;
65         /** Indicates that the app is not authorized to access media via MBMS.*/
66         public static final int ERROR_APP_PERMISSIONS_NOT_GRANTED = 102;
67         /** Indicates that the middleware was unable to initialize for this app. */
68         public static final int ERROR_UNABLE_TO_INITIALIZE = 103;
69     }
70 
71     /**
72      * Indicates the errors that may occur at any point and are applicable to both
73      * streaming and file-download.
74      */
75     public static class GeneralErrors {
GeneralErrors()76         private GeneralErrors() {}
77         /**
78          * Indicates that the app attempted to perform an operation before receiving notification
79          * that the middleware is ready via {@link MbmsStreamingSessionCallback#onMiddlewareReady()}
80          * or {@link MbmsDownloadSessionCallback#onMiddlewareReady()}.
81          */
82         public static final int ERROR_MIDDLEWARE_NOT_YET_READY = 201;
83         /**
84          * Indicates that the middleware ran out of memory and was unable to complete the requested
85          * operation.
86          */
87         public static final int ERROR_OUT_OF_MEMORY = 202;
88         /**
89          * Indicates that the requested operation failed due to the middleware being unavailable due
90          * to a transient condition. The app may retry the operation at a later time.
91          */
92         public static final int ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE = 203;
93         /**
94          * Indicates that the requested operation was not performed due to being in emergency
95          * callback mode.
96          */
97         public static final int ERROR_IN_E911 = 204;
98         /** Indicates that MBMS is not available due to the device being in roaming. */
99         public static final int ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE = 205;
100         /** Indicates that MBMS is not available due to a SIM read error. */
101         public static final int ERROR_UNABLE_TO_READ_SIM = 206;
102         /**
103          * Indicates that MBMS is not available due to the inserted SIM being from an unsupported
104          * carrier.
105          */
106         public static final int ERROR_CARRIER_CHANGE_NOT_ALLOWED = 207;
107     }
108 
109     /**
110      * Indicates the errors that are applicable only to the streaming use-case
111      */
112     public static class StreamingErrors {
StreamingErrors()113         private StreamingErrors() {}
114         /** Indicates that the middleware cannot start a stream due to too many ongoing streams */
115         public static final int ERROR_CONCURRENT_SERVICE_LIMIT_REACHED = 301;
116 
117         /** Indicates that the middleware was unable to start the streaming service */
118         public static final int ERROR_UNABLE_TO_START_SERVICE = 302;
119 
120         /**
121          * Indicates that the app called
122          * {@link MbmsStreamingSession#startStreaming(StreamingServiceInfo,
123          * java.util.concurrent.Executor, StreamingServiceCallback)}
124          * more than once for the same {@link StreamingServiceInfo}.
125          */
126         public static final int ERROR_DUPLICATE_START_STREAM = 303;
127     }
128 
129     /**
130      * Indicates the errors that are applicable only to the file-download use-case
131      */
132     public static class DownloadErrors {
DownloadErrors()133         private DownloadErrors() { }
134         /**
135          * Indicates that the app is not allowed to change the temp file root at this time due to
136          * outstanding download requests.
137          */
138         public static final int ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT = 401;
139 
140         /** Indicates that the middleware has no record of the supplied {@link DownloadRequest}. */
141         public static final int ERROR_UNKNOWN_DOWNLOAD_REQUEST = 402;
142 
143         /** Indicates the the middleware has no record of the supplied {@link FileInfo} */
144         public static final int ERROR_UNKNOWN_FILE_INFO = 403;
145 
146         /**
147          * Indicates that the service announcement descriptor passed via
148          * {@link android.telephony.MbmsDownloadSession#addServiceAnnouncement(byte[])}
149          * is malformed.
150          */
151         public static final int ERROR_MALFORMED_SERVICE_ANNOUNCEMENT = 404;
152     }
153 
154     /**
155      * Indicates the errors that are applicable only to the group call use-case.
156      */
157     public static class GroupCallErrors {
GroupCallErrors()158         private GroupCallErrors() { }
159         /** Indicates that the middleware was unable to start the group call. */
160         public static final int ERROR_UNABLE_TO_START_SERVICE = 501;
161 
162         /**
163          * Indicates that the app called
164          * {@link android.telephony.MbmsGroupCallSession#startGroupCall} more than once for the
165          * same {@code tmgi}.
166          */
167         public static final int ERROR_DUPLICATE_START_GROUP_CALL = 502;
168     }
169 
170     /** @hide */
171     @IntDef(value = {
172             SUCCESS,
173             ERROR_NO_UNIQUE_MIDDLEWARE,
174             ERROR_MIDDLEWARE_NOT_BOUND,
175             ERROR_MIDDLEWARE_LOST,
176             InitializationErrors.ERROR_DUPLICATE_INITIALIZE,
177             InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED,
178             InitializationErrors.ERROR_UNABLE_TO_INITIALIZE,
179             GeneralErrors.ERROR_MIDDLEWARE_NOT_YET_READY,
180             GeneralErrors.ERROR_OUT_OF_MEMORY,
181             GeneralErrors.ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE,
182             GeneralErrors.ERROR_IN_E911,
183             GeneralErrors.ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE,
184             GeneralErrors.ERROR_UNABLE_TO_READ_SIM,
185             GeneralErrors.ERROR_CARRIER_CHANGE_NOT_ALLOWED,
186             StreamingErrors.ERROR_CONCURRENT_SERVICE_LIMIT_REACHED,
187             StreamingErrors.ERROR_UNABLE_TO_START_SERVICE,
188             StreamingErrors.ERROR_DUPLICATE_START_STREAM,
189             DownloadErrors.ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT,
190             DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST,
191             DownloadErrors.ERROR_UNKNOWN_FILE_INFO,
192             DownloadErrors.ERROR_MALFORMED_SERVICE_ANNOUNCEMENT,
193             GroupCallErrors.ERROR_UNABLE_TO_START_SERVICE,
194             GroupCallErrors.ERROR_DUPLICATE_START_GROUP_CALL,
195     })
196     @Retention(RetentionPolicy.SOURCE)
197     public @interface MbmsError {
198     }
199 
MbmsErrors()200     private MbmsErrors() {}
201 }
202