1/*
2 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 * Not a Contribution.
4 *
5 * Copyright (C) 2006 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20package com.android.internal.telephony.gsm;
21
22import android.telephony.Rlog;
23import com.android.internal.telephony.CallForwardInfo;
24import com.android.internal.telephony.GsmCdmaPhone;
25
26import java.util.ArrayList;
27
28/**
29 * See also RIL_StkCcUnsolSsResponse in include/telephony/ril.h
30 *
31 * {@hide}
32 */
33public class SsData {
34    public enum ServiceType {
35        SS_CFU,
36        SS_CF_BUSY,
37        SS_CF_NO_REPLY,
38        SS_CF_NOT_REACHABLE,
39        SS_CF_ALL,
40        SS_CF_ALL_CONDITIONAL,
41        SS_CLIP,
42        SS_CLIR,
43        SS_COLP,
44        SS_COLR,
45        SS_WAIT,
46        SS_BAOC,
47        SS_BAOIC,
48        SS_BAOIC_EXC_HOME,
49        SS_BAIC,
50        SS_BAIC_ROAMING,
51        SS_ALL_BARRING,
52        SS_OUTGOING_BARRING,
53        SS_INCOMING_BARRING;
54
55        public boolean isTypeCF() {
56            return (this == SS_CFU || this == SS_CF_BUSY || this == SS_CF_NO_REPLY ||
57                  this == SS_CF_NOT_REACHABLE || this == SS_CF_ALL ||
58                  this == SS_CF_ALL_CONDITIONAL);
59        }
60
61        public boolean isTypeUnConditional() {
62            return (this == SS_CFU || this == SS_CF_ALL);
63        }
64
65        public boolean isTypeCW() {
66            return (this == SS_WAIT);
67        }
68
69        public boolean isTypeClip() {
70            return (this == SS_CLIP);
71        }
72
73        public boolean isTypeClir() {
74            return (this == SS_CLIR);
75        }
76
77        public boolean isTypeBarring() {
78            return (this == SS_BAOC || this == SS_BAOIC || this == SS_BAOIC_EXC_HOME ||
79                  this == SS_BAIC || this == SS_BAIC_ROAMING || this == SS_ALL_BARRING ||
80                  this == SS_OUTGOING_BARRING || this == SS_INCOMING_BARRING);
81        }
82    };
83
84    public enum RequestType {
85        SS_ACTIVATION,
86        SS_DEACTIVATION,
87        SS_INTERROGATION,
88        SS_REGISTRATION,
89        SS_ERASURE;
90
91        public boolean isTypeInterrogation() {
92            return (this == SS_INTERROGATION);
93        }
94    };
95
96    public enum TeleserviceType {
97        SS_ALL_TELE_AND_BEARER_SERVICES,
98        SS_ALL_TELESEVICES,
99        SS_TELEPHONY,
100        SS_ALL_DATA_TELESERVICES,
101        SS_SMS_SERVICES,
102        SS_ALL_TELESERVICES_EXCEPT_SMS;
103    };
104
105    public ServiceType serviceType;
106    public RequestType requestType;
107    public TeleserviceType teleserviceType;
108    public int serviceClass;
109    public int result;
110
111    public int[] ssInfo; /* This is the response data for most of the SS GET/SET
112                            RIL requests. E.g. RIL_REQUSET_GET_CLIR returns
113                            two ints, so first two values of ssInfo[] will be
114                            used for respone if serviceType is SS_CLIR and
115                            requestType is SS_INTERROGATION */
116
117    public CallForwardInfo[] cfInfo; /* This is the response data for SS request
118                                        to query call forward status. see
119                                        RIL_REQUEST_QUERY_CALL_FORWARD_STATUS */
120
121    public ServiceType ServiceTypeFromRILInt(int type) {
122        try {
123            return ServiceType.values()[type];
124        } catch (IndexOutOfBoundsException e) {
125            Rlog.e(GsmCdmaPhone.LOG_TAG, "Invalid Service type");
126            return null;
127        }
128    }
129
130    public RequestType RequestTypeFromRILInt(int type) {
131        try {
132            return RequestType.values()[type];
133        } catch (IndexOutOfBoundsException e) {
134            Rlog.e(GsmCdmaPhone.LOG_TAG, "Invalid Request type");
135            return null;
136        }
137    }
138
139    public TeleserviceType TeleserviceTypeFromRILInt(int type) {
140        try {
141            return TeleserviceType.values()[type];
142        } catch (IndexOutOfBoundsException e) {
143            Rlog.e(GsmCdmaPhone.LOG_TAG, "Invalid Teleservice type");
144            return null;
145        }
146    }
147
148    public String toString() {
149        return "[SsData] " + "ServiceType: " + serviceType
150            + " RequestType: " + requestType
151            + " TeleserviceType: " + teleserviceType
152            + " ServiceClass: " + serviceClass
153            + " Result: " + result
154            + " Is Service Type CF: " + serviceType.isTypeCF();
155    }
156}
157