1d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu/*
2d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Copyright 2017 The Android Open Source Project
3d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu *
4d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Licensed under the Apache License, Version 2.0 (the "License");
5d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * you may not use this file except in compliance with the License.
6d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * You may obtain a copy of the License at
7d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu *
8d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu *      http://www.apache.org/licenses/LICENSE-2.0
9d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu *
10d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Unless required by applicable law or agreed to in writing, software
11d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * distributed under the License is distributed on an "AS IS" BASIS,
12d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * See the License for the specific language governing permissions and
14d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * limitations under the License.
15d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */
16d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
17d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yupackage android.telephony;
18d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
19d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.annotation.IntDef;
20d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.annotation.Nullable;
21d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.os.Parcel;
22d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport android.os.Parcelable;
23d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
24d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.lang.annotation.Retention;
25d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.lang.annotation.RetentionPolicy;
26d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.util.Arrays;
27d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yuimport java.util.Objects;
28d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
29d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu/**
30d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * Description of a mobile network registration state
31d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu * @hide
32d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu */
33d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yupublic class NetworkRegistrationState implements Parcelable {
34d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
35d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * Network domain
36d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @hide
37d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
38d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Retention(RetentionPolicy.SOURCE)
39d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @IntDef(prefix = "DOMAIN_", value = {DOMAIN_CS, DOMAIN_PS})
40d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public @interface Domain {}
41d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
42d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Circuit switching domain */
43d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int DOMAIN_CS = 1;
44d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Packet switching domain */
45d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int DOMAIN_PS = 2;
46d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
47d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
48d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * Registration state
49d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @hide
50d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
51d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Retention(RetentionPolicy.SOURCE)
52d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @IntDef(prefix = "REG_STATE_",
53d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            value = {REG_STATE_NOT_REG_NOT_SEARCHING, REG_STATE_HOME, REG_STATE_NOT_REG_SEARCHING,
54d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                    REG_STATE_DENIED, REG_STATE_UNKNOWN, REG_STATE_ROAMING})
55d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public @interface RegState {}
56d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
57d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Not registered. The device is not currently searching a new operator to register */
58d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int REG_STATE_NOT_REG_NOT_SEARCHING = 0;
59d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Registered on home network */
60d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int REG_STATE_HOME = 1;
61d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Not registered. The device is currently searching a new operator to register */
62d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int REG_STATE_NOT_REG_SEARCHING = 2;
63d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Registration denied */
64d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int REG_STATE_DENIED = 3;
65d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Registration state is unknown */
66d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int REG_STATE_UNKNOWN = 4;
67d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** Registered on roaming network */
68d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int REG_STATE_ROAMING = 5;
69d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
70d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
71d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * Supported service type
72d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @hide
73d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
74d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Retention(RetentionPolicy.SOURCE)
75d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @IntDef(prefix = "SERVICE_TYPE_",
76d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            value = {SERVICE_TYPE_VOICE, SERVICE_TYPE_DATA, SERVICE_TYPE_SMS, SERVICE_TYPE_VIDEO,
77d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                    SERVICE_TYPE_EMERGENCY})
78d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public @interface ServiceType {}
79d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
80d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int SERVICE_TYPE_VOICE = 1;
81d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int SERVICE_TYPE_DATA = 2;
82d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int SERVICE_TYPE_SMS = 3;
83d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int SERVICE_TYPE_VIDEO = 4;
84d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final int SERVICE_TYPE_EMERGENCY = 5;
85d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
86d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /** {@link AccessNetworkConstants.TransportType}*/
87d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final int mTransportType;
88d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
89d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Domain
90d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final int mDomain;
91d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
92d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @RegState
93d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final int mRegState;
94d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
95d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final int mAccessNetworkTechnology;
96d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
97d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final int mReasonForDenial;
98d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
99d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final boolean mEmergencyOnly;
100d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
101d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final int[] mAvailableServices;
102d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
103d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Nullable
104d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private final CellIdentity mCellIdentity;
105d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
1064c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    @Nullable
1074c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    private VoiceSpecificRegistrationStates mVoiceSpecificStates;
1084c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
1094c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    @Nullable
1104c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    private DataSpecificRegistrationStates mDataSpecificStates;
111d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
112d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
113d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @param transportType Transport type. Must be {@link AccessNetworkConstants.TransportType}
114d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @param domain Network domain. Must be DOMAIN_CS or DOMAIN_PS.
115d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @param regState Network registration state.
116d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @param accessNetworkTechnology See TelephonyManager NETWORK_TYPE_XXXX.
117d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @param reasonForDenial Reason for denial if the registration state is DENIED.
118d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @param availableServices The supported service.
119d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @param cellIdentity The identity representing a unique cell
120d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
121d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public NetworkRegistrationState(int transportType, int domain, int regState,
122d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly,
123d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            int[] availableServices, @Nullable CellIdentity cellIdentity) {
124d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mTransportType = transportType;
125d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mDomain = domain;
126d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mRegState = regState;
127d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mAccessNetworkTechnology = accessNetworkTechnology;
128d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mReasonForDenial = reasonForDenial;
129d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mAvailableServices = availableServices;
130d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mCellIdentity = cellIdentity;
131d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mEmergencyOnly = emergencyOnly;
132d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
133d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
1344c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    /**
1354c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * Constructor for voice network registration states.
1364c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * @hide
1374c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     */
1384c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    public NetworkRegistrationState(int transportType, int domain, int regState,
1394c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen            int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly,
1404c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen            int[] availableServices, @Nullable CellIdentity cellIdentity, boolean cssSupported,
1414c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen            int roamingIndicator, int systemIsInPrl, int defaultRoamingIndicator) {
1424c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        this(transportType, domain, regState, accessNetworkTechnology,
1434c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                reasonForDenial, emergencyOnly, availableServices, cellIdentity);
1444c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
1454c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        mVoiceSpecificStates = new VoiceSpecificRegistrationStates(cssSupported, roamingIndicator,
1464c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                systemIsInPrl, defaultRoamingIndicator);
1474c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    }
1484c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
1494c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    /**
1504c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * Constructor for data network registration states.
1514c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * @hide
1524c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     */
1534c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    public NetworkRegistrationState(int transportType, int domain, int regState,
1544c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen            int accessNetworkTechnology, int reasonForDenial, boolean emergencyOnly,
1554c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen            int[] availableServices, @Nullable CellIdentity cellIdentity, int maxDataCalls) {
1564c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        this(transportType, domain, regState, accessNetworkTechnology,
1574c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                reasonForDenial, emergencyOnly, availableServices, cellIdentity);
1584c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
1594c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        mDataSpecificStates = new DataSpecificRegistrationStates(maxDataCalls);
1604c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    }
1614c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
162d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    protected NetworkRegistrationState(Parcel source) {
163d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mTransportType = source.readInt();
164d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mDomain = source.readInt();
165d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mRegState = source.readInt();
166d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mAccessNetworkTechnology = source.readInt();
167d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mReasonForDenial = source.readInt();
168d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mEmergencyOnly = source.readBoolean();
169d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mAvailableServices = source.createIntArray();
170d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        mCellIdentity = source.readParcelable(CellIdentity.class.getClassLoader());
1714c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        mVoiceSpecificStates = source.readParcelable(
1724c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                VoiceSpecificRegistrationStates.class.getClassLoader());
1734c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        mDataSpecificStates = source.readParcelable(
1744c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                DataSpecificRegistrationStates.class.getClassLoader());
175d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
176d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
177d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
178d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @return The transport type.
179d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
180d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public int getTransportType() { return mTransportType; }
181d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
182d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
183d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @return The network domain.
184d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
185d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public @Domain int getDomain() { return mDomain; }
186d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
187d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
188d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @return The registration state.
189d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
190d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public @RegState int getRegState() {
191d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        return mRegState;
192d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
193d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
194d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
195d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @return Whether emergency is enabled.
196d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
197d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public boolean isEmergencyEnabled() { return mEmergencyOnly; }
198d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
199d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
200d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @return List of available service types.
201d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
202d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public int[] getAvailableServices() { return mAvailableServices; }
203d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
204d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    /**
205d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     * @return The access network technology. Must be one of TelephonyManager.NETWORK_TYPE_XXXX.
206d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu     */
207d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public int getAccessNetworkTechnology() {
208d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        return mAccessNetworkTechnology;
209d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
210d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
2114c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    /**
2124c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * @return Reason for denial from network.
2134c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     */
2144c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    public int getReasonForDenial() {
2154c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        return mReasonForDenial;
2164c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    }
2174c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
2184c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    /**
2194c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * @return The cell information.
2204c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     */
2214c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    public CellIdentity getCellIdentity() {
2224c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        return mCellIdentity;
2234c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    }
2244c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
2254c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    /**
2264c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * @hide
2274c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     */
2284c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    @Nullable
2294c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    public VoiceSpecificRegistrationStates getVoiceSpecificStates() {
2304c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        return mVoiceSpecificStates;
2314c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    }
2324c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
2334c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    /**
2344c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     * @hide
2354c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen     */
2364c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    @Nullable
2374c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    public DataSpecificRegistrationStates getDataSpecificStates() {
2384c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        return mDataSpecificStates;
2394c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen    }
2404c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen
241d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Override
242d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public int describeContents() {
243d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        return 0;
244d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
245d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
246d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    private static String regStateToString(int regState) {
247d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        switch (regState) {
248d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            case REG_STATE_NOT_REG_NOT_SEARCHING: return "NOT_REG_NOT_SEARCHING";
249d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            case REG_STATE_HOME: return "HOME";
250d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            case REG_STATE_NOT_REG_SEARCHING: return "NOT_REG_SEARCHING";
251d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            case REG_STATE_DENIED: return "DENIED";
252d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            case REG_STATE_UNKNOWN: return "UNKNOWN";
253d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            case REG_STATE_ROAMING: return "ROAMING";
254d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        }
255d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        return "Unknown reg state " + regState;
256d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
257d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
258d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Override
259d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public String toString() {
260d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        return new StringBuilder("NetworkRegistrationState{")
261d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append("transportType=").append(mTransportType)
262d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(" domain=").append((mDomain == DOMAIN_CS) ? "CS" : "PS")
263d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(" regState=").append(regStateToString(mRegState))
264d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(" accessNetworkTechnology=")
265d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(TelephonyManager.getNetworkTypeName(mAccessNetworkTechnology))
266d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(" reasonForDenial=").append(mReasonForDenial)
267d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(" emergencyEnabled=").append(mEmergencyOnly)
268d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(" supportedServices=").append(mAvailableServices)
269d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append(" cellIdentity=").append(mCellIdentity)
2704c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                .append(" voiceSpecificStates=").append(mVoiceSpecificStates)
2714c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                .append(" dataSpecificStates=").append(mDataSpecificStates)
272d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                .append("}").toString();
273d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
274d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
275d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Override
276d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public int hashCode() {
277d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        return Objects.hash(mTransportType, mDomain, mRegState, mAccessNetworkTechnology,
2784c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                mReasonForDenial, mEmergencyOnly, mAvailableServices, mCellIdentity,
2794c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen                mVoiceSpecificStates, mDataSpecificStates);
280d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
281d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
282d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Override
283d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public boolean equals(Object o) {
284d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        if (this == o) return true;
285d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
286d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        if (o == null || !(o instanceof NetworkRegistrationState)) {
287d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            return false;
288d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        }
289d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
290d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        NetworkRegistrationState other = (NetworkRegistrationState) o;
291d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        return mTransportType == other.mTransportType
292d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                && mDomain == other.mDomain
293d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                && mRegState == other.mRegState
294d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                && mAccessNetworkTechnology == other.mAccessNetworkTechnology
295d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                && mReasonForDenial == other.mReasonForDenial
296d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                && mEmergencyOnly == other.mEmergencyOnly
297d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                && (mAvailableServices == other.mAvailableServices
298d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu                    || Arrays.equals(mAvailableServices, other.mAvailableServices))
2995ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen                && equals(mCellIdentity, other.mCellIdentity)
3005ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen                && equals(mVoiceSpecificStates, other.mVoiceSpecificStates)
3015ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen                && equals(mDataSpecificStates, other.mDataSpecificStates);
302d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
303d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
304d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    @Override
305d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public void writeToParcel(Parcel dest, int flags) {
306d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeInt(mTransportType);
307d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeInt(mDomain);
308d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeInt(mRegState);
309d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeInt(mAccessNetworkTechnology);
310d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeInt(mReasonForDenial);
311d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeBoolean(mEmergencyOnly);
312d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeIntArray(mAvailableServices);
313d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        dest.writeParcelable(mCellIdentity, 0);
3144c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        dest.writeParcelable(mVoiceSpecificStates, 0);
3154c01328d90a5ccfed9201cf744ad5a782b5a52a2Malcolm Chen        dest.writeParcelable(mDataSpecificStates, 0);
316d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    }
317d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
318d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    public static final Parcelable.Creator<NetworkRegistrationState> CREATOR =
319d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            new Parcelable.Creator<NetworkRegistrationState>() {
320d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        @Override
321d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        public NetworkRegistrationState createFromParcel(Parcel source) {
322d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            return new NetworkRegistrationState(source);
323d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        }
324d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu
325d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        @Override
326d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        public NetworkRegistrationState[] newArray(int size) {
327d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu            return new NetworkRegistrationState[size];
328d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu        }
329d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu    };
3305ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen
3315ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen    private static boolean equals(Object o1, Object o2) {
3325ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen        if (o1 == o2) {
3335ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen            return true;
3345ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen        } else if (o1 == null) {
3355ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen            return false;
3365ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen        } else {
3375ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen            return o1.equals(o2);
3385ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen        }
3395ad2092112465c37a167c98eb6a405471ac493d5Malcolm Chen    }
340d5f1de19f49422f79ad23251cbabbe855cff5efbJack Yu}
341