1168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu/*
2168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * Copyright (C) 2016 The Android Open Source Project
3168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu *
4168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * Licensed under the Apache License, Version 2.0 (the "License");
5168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * you may not use this file except in compliance with the License.
6168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * You may obtain a copy of the License at
7168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu *
8168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu *      http://www.apache.org/licenses/LICENSE-2.0
9168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu *
10168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * Unless required by applicable law or agreed to in writing, software
11168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * distributed under the License is distributed on an "AS IS" BASIS,
12168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * See the License for the specific language governing permissions and
14168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu * limitations under the License.
15168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu */
16168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
17168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yupackage com.android.internal.telephony;
18168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
19b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbachimport android.os.Bundle;
20168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yuimport android.os.Parcel;
21d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chenimport android.telephony.AccessNetworkConstants;
22d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chenimport android.telephony.NetworkRegistrationState;
23168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yuimport android.telephony.ServiceState;
24168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yuimport android.telephony.TelephonyManager;
25168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yuimport android.test.suitebuilder.annotation.SmallTest;
26168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yuimport android.util.Pair;
27168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
28168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yuimport junit.framework.TestCase;
29168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
30168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yuimport java.util.ArrayList;
31f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbachimport java.util.Arrays;
32168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
33168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yupublic class ServiceStateTest extends TestCase {
34168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
35168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    @SmallTest
36168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    public void testRoaming() {
37168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ServiceState ss = new ServiceState();
38168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
39168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaDefaultRoamingIndicator(1);
40168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(1, ss.getCdmaDefaultRoamingIndicator());
41168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
42168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaEriIconIndex(2);
43168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(2, ss.getCdmaEriIconIndex());
44168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
45168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaEriIconMode(3);
46168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(3, ss.getCdmaEriIconMode());
47168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
48168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaRoamingIndicator(4);
49168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(4, ss.getCdmaRoamingIndicator());
50168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
51168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataRoamingType(ServiceState.ROAMING_TYPE_DOMESTIC);
52168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertTrue(ss.getDataRoaming());
53168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(ServiceState.ROAMING_TYPE_DOMESTIC, ss.getDataRoamingType());
54168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
55168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataRoamingFromRegistration(true);
56168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertTrue(ss.getDataRoamingFromRegistration());
57168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
58168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setVoiceRoamingType(ServiceState.ROAMING_TYPE_DOMESTIC);
59168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertTrue(ss.getVoiceRoaming());
60168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(ServiceState.ROAMING_TYPE_DOMESTIC, ss.getVoiceRoamingType());
61168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    }
62168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
63168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    @SmallTest
64168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    public void testRegState() {
65168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ServiceState ss = new ServiceState();
66168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
67168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataRegState(ServiceState.STATE_IN_SERVICE);
68168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(ServiceState.STATE_IN_SERVICE, ss.getDataRegState());
69168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
70168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setVoiceRegState(ServiceState.STATE_IN_SERVICE);
71168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(ServiceState.STATE_IN_SERVICE, ss.getVoiceRegState());
72168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    }
73168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
74168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    @SmallTest
75176f28521fd45bb739709d309e7970b1558c9f61Cassie    public void testBitmaskFromString() {
76176f28521fd45bb739709d309e7970b1558c9f61Cassie        String networkTypeList = "4|7|5|6|12|13|14|19";
77176f28521fd45bb739709d309e7970b1558c9f61Cassie        int networkTypeBitmask = 1 << (4 - 1) | 1 << (7 - 1) | 1 << (5 - 1) | 1 << (6 - 1)
78176f28521fd45bb739709d309e7970b1558c9f61Cassie                | 1 << (12 - 1) | 1 << (14 - 1) | 1 << (13 - 1) | 1 << (19 - 1);
79176f28521fd45bb739709d309e7970b1558c9f61Cassie        assertEquals(networkTypeBitmask,
80176f28521fd45bb739709d309e7970b1558c9f61Cassie                ServiceState.getBitmaskFromString(networkTypeList));
81176f28521fd45bb739709d309e7970b1558c9f61Cassie
82176f28521fd45bb739709d309e7970b1558c9f61Cassie        networkTypeList = "13";
83176f28521fd45bb739709d309e7970b1558c9f61Cassie        networkTypeBitmask = 1 << (13 - 1);
84176f28521fd45bb739709d309e7970b1558c9f61Cassie        assertEquals(networkTypeBitmask,
85176f28521fd45bb739709d309e7970b1558c9f61Cassie                ServiceState.getBitmaskFromString(networkTypeList));
86176f28521fd45bb739709d309e7970b1558c9f61Cassie
87176f28521fd45bb739709d309e7970b1558c9f61Cassie        networkTypeList = "";
88176f28521fd45bb739709d309e7970b1558c9f61Cassie        networkTypeBitmask = 0;
89176f28521fd45bb739709d309e7970b1558c9f61Cassie        assertEquals(networkTypeBitmask,
90176f28521fd45bb739709d309e7970b1558c9f61Cassie                ServiceState.getBitmaskFromString(networkTypeList));
91176f28521fd45bb739709d309e7970b1558c9f61Cassie    }
92176f28521fd45bb739709d309e7970b1558c9f61Cassie
93176f28521fd45bb739709d309e7970b1558c9f61Cassie    @SmallTest
94176f28521fd45bb739709d309e7970b1558c9f61Cassie    public void testConvertNetworkTypeBitmaskToBearerBitmask() {
95176f28521fd45bb739709d309e7970b1558c9f61Cassie        // The value was calculated by adding "4|4|7|5|6|12|14|13|19".
96176f28521fd45bb739709d309e7970b1558c9f61Cassie        int networkTypeBitmask = 276600;
97176f28521fd45bb739709d309e7970b1558c9f61Cassie        // The value was calculated by adding "4|5|6|7|8|12|13|14|19".
98176f28521fd45bb739709d309e7970b1558c9f61Cassie        int bearerBitmask = 276728;
99176f28521fd45bb739709d309e7970b1558c9f61Cassie        assertEquals(bearerBitmask,
100176f28521fd45bb739709d309e7970b1558c9f61Cassie                ServiceState.convertNetworkTypeBitmaskToBearerBitmask(networkTypeBitmask));
101176f28521fd45bb739709d309e7970b1558c9f61Cassie
102176f28521fd45bb739709d309e7970b1558c9f61Cassie        networkTypeBitmask = 0;
103176f28521fd45bb739709d309e7970b1558c9f61Cassie        bearerBitmask = 0;
104176f28521fd45bb739709d309e7970b1558c9f61Cassie        assertEquals(bearerBitmask,
105176f28521fd45bb739709d309e7970b1558c9f61Cassie                ServiceState.convertNetworkTypeBitmaskToBearerBitmask(networkTypeBitmask));
106176f28521fd45bb739709d309e7970b1558c9f61Cassie    }
107176f28521fd45bb739709d309e7970b1558c9f61Cassie
108176f28521fd45bb739709d309e7970b1558c9f61Cassie    @SmallTest
109176f28521fd45bb739709d309e7970b1558c9f61Cassie    public void testConvertBearerBitmaskToNetworkTypeBitmask() {
110176f28521fd45bb739709d309e7970b1558c9f61Cassie        // The value was calculated by adding "4|4|7|5|6|12|14|13|19".
111176f28521fd45bb739709d309e7970b1558c9f61Cassie        int networkTypeBitmask = 276600;
112176f28521fd45bb739709d309e7970b1558c9f61Cassie        // The value was calculated by adding "4|5|6|7|8|12|13|14|19".
113176f28521fd45bb739709d309e7970b1558c9f61Cassie        int bearerBitmask = 276728;
114176f28521fd45bb739709d309e7970b1558c9f61Cassie        assertEquals(networkTypeBitmask,
115176f28521fd45bb739709d309e7970b1558c9f61Cassie                ServiceState.convertBearerBitmaskToNetworkTypeBitmask(bearerBitmask));
116176f28521fd45bb739709d309e7970b1558c9f61Cassie
117176f28521fd45bb739709d309e7970b1558c9f61Cassie        networkTypeBitmask = 0;
118176f28521fd45bb739709d309e7970b1558c9f61Cassie        bearerBitmask = 0;
119176f28521fd45bb739709d309e7970b1558c9f61Cassie        assertEquals(networkTypeBitmask,
120176f28521fd45bb739709d309e7970b1558c9f61Cassie                ServiceState.convertBearerBitmaskToNetworkTypeBitmask(bearerBitmask));
121176f28521fd45bb739709d309e7970b1558c9f61Cassie    }
122176f28521fd45bb739709d309e7970b1558c9f61Cassie
123176f28521fd45bb739709d309e7970b1558c9f61Cassie    @SmallTest
124168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    public void testRAT() {
125168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ServiceState ss = new ServiceState();
126168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
127168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
128168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(ServiceState.RIL_RADIO_TECHNOLOGY_LTE, ss.getRilDataRadioTechnology());
129168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(TelephonyManager.NETWORK_TYPE_LTE, ss.getDataNetworkType());
130168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
131168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setRilVoiceRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT);
132168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT, ss.getRilVoiceRadioTechnology());
133168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(TelephonyManager.NETWORK_TYPE_1xRTT, ss.getVoiceNetworkType());
134168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
135168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ArrayList<Pair<Integer, Boolean>> rats = new ArrayList<Pair<Integer, Boolean>>();
136168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
137168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_IS95A, true));
138168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_IS95B, true));
139168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT, true));
140168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0, true));
141168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A, true));
142168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B, true));
143168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD, true));
144168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
145168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_GPRS, false));
146168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_EDGE, false));
147168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_UMTS, false));
148168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA, false));
149168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA, false));
150168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSPA, false));
151168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_LTE, false));
152168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP, false));
153168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_GSM, false));
154168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA, false));
155168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        rats.add(new Pair<Integer, Boolean>(ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN, false));
156168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
157168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        for (Pair<Integer, Boolean> rat : rats) {
158168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu            boolean isCdma = rat.second;
159168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
160168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu            if (isCdma) {
161168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu                assertTrue("RAT " + rat + " should be CDMA", ServiceState.isCdma(rat.first));
162168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu                assertFalse("RAT " + rat + " should not be GSM", ServiceState.isGsm(rat.first));
163168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu            } else {
164168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu                assertFalse("RAT " + rat + " should not be CDMA", ServiceState.isCdma(rat.first));
165168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu                assertTrue("RAT " + rat + " should be GSM", ServiceState.isGsm(rat.first));
166168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu            }
167168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        }
168168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    }
169f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach    @SmallTest
170f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach    public void testGetCellBandwidths() {
171f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach        ServiceState ss = new ServiceState();
172f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach
173f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach        ss.setCellBandwidths(null);
174f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach        assertTrue(Arrays.equals(ss.getCellBandwidths(), new int[0]));
175f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach
176f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach        int[] cellBandwidths = new int[]{5000, 10000};
177f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach        ss.setCellBandwidths(cellBandwidths);
178f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach        assertTrue(Arrays.equals(ss.getCellBandwidths(), cellBandwidths));
179f223e107508d50a9ad174b3179f741fb93da8a93Eric Schwarzenbach    }
180168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
181168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    @SmallTest
182168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    public void testOperatorName() {
183168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ServiceState ss = new ServiceState();
184168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
185168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataOperatorAlphaLong("abc");
186168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("abc", ss.getDataOperatorAlphaLong());
187168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
188168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataOperatorName("def", "xyz", "123456");
189168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("xyz", ss.getDataOperatorAlphaShort());
190168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
191168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setOperatorName("long", "short", "numeric");
192168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("long", ss.getVoiceOperatorAlphaLong());
193168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("short", ss.getVoiceOperatorAlphaShort());
194168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("numeric", ss.getVoiceOperatorNumeric());
195168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("long", ss.getDataOperatorAlphaLong());
196168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("short", ss.getDataOperatorAlphaShort());
197168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals("numeric", ss.getDataOperatorNumeric());
198477c55f901492d5c09c460e0a708ff3627e6850cZoran Jovanovic        assertEquals("long", ss.getOperatorAlpha());
199477c55f901492d5c09c460e0a708ff3627e6850cZoran Jovanovic
200477c55f901492d5c09c460e0a708ff3627e6850cZoran Jovanovic        ss.setOperatorName("", "short", "");
201477c55f901492d5c09c460e0a708ff3627e6850cZoran Jovanovic        assertEquals("short", ss.getOperatorAlpha());
202168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    }
203168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
204168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    @SmallTest
205168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    public void testMisc() {
206168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ServiceState ss = new ServiceState();
207168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
208168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCssIndicator(100);
209168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(1, ss.getCssIndicator());
210168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
211168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setIsManualSelection(true);
212168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertTrue(ss.getIsManualSelection());
213168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
214cb209509f5a3489b06a5d9b89b2c1fd8f6499c83Jack Yu        ss.setCdmaSystemAndNetworkId(123, 456);
215cb209509f5a3489b06a5d9b89b2c1fd8f6499c83Jack Yu        assertEquals(123, ss.getCdmaSystemId());
216cb209509f5a3489b06a5d9b89b2c1fd8f6499c83Jack Yu        assertEquals(456, ss.getCdmaNetworkId());
217168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
218168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setEmergencyOnly(true);
219168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertTrue(ss.isEmergencyOnly());
220168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    }
221168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
222168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    @SmallTest
223168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    public void testParcel() {
224168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
225168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ServiceState ss = new ServiceState();
226168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setVoiceRegState(ServiceState.STATE_IN_SERVICE);
227168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE);
228168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setVoiceRoamingType(ServiceState.ROAMING_TYPE_INTERNATIONAL);
229168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataRoamingType(ServiceState.ROAMING_TYPE_UNKNOWN);
230168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setOperatorName("long", "short", "numeric");
231168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setIsManualSelection(true);
232168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setRilVoiceRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT);
233168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0);
234168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCssIndicator(1);
235cb209509f5a3489b06a5d9b89b2c1fd8f6499c83Jack Yu        ss.setCdmaSystemAndNetworkId(2, 3);
236168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaRoamingIndicator(4);
237168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaDefaultRoamingIndicator(5);
238168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaEriIconIndex(6);
239168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setCdmaEriIconMode(7);
240168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setEmergencyOnly(true);
241168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.setDataRoamingFromRegistration(true);
242b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setChannelNumber(2100);
243b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setCellBandwidths(new int[]{1400, 5000, 10000});
244168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
245168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        Parcel p = Parcel.obtain();
246168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ss.writeToParcel(p, 0);
247168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        p.setDataPosition(0);
248168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu
249168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        ServiceState newSs = new ServiceState(p);
250168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu        assertEquals(ss, newSs);
251168ba9c4a5234e8cccc9d23879aea4c1740d3510Jack Yu    }
252b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach
253b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach    @SmallTest
254b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach    public void testBundle() {
255b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ServiceState ss = new ServiceState();
256b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setVoiceRegState(ServiceState.STATE_IN_SERVICE);
257b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE);
258b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setVoiceRoamingType(ServiceState.ROAMING_TYPE_INTERNATIONAL);
259b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setDataRoamingType(ServiceState.ROAMING_TYPE_UNKNOWN);
260b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setOperatorName("long", "short", "numeric");
261b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setIsManualSelection(true);
262b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setRilVoiceRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT);
263b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0);
264b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setCssIndicator(1);
265cb209509f5a3489b06a5d9b89b2c1fd8f6499c83Jack Yu        ss.setCdmaSystemAndNetworkId(2, 3);
266b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setCdmaRoamingIndicator(4);
267b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setCdmaDefaultRoamingIndicator(5);
268b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setCdmaEriIconIndex(6);
269b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setCdmaEriIconMode(7);
270b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setEmergencyOnly(true);
271b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setDataRoamingFromRegistration(true);
272b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setChannelNumber(2100);
273b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.setCellBandwidths(new int[]{3, 4, 10});
274b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach
275b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        Bundle b = new Bundle();
276b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ss.fillInNotifierBundle(b);
277b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        ServiceState newSs = ServiceState.newFromBundle(b);
278b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach
279b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach        assertEquals(ss, newSs);
280b364e1980a0553a4cea5a322a3822268479ea085Eric Schwarzenbach    }
281d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
282d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen    @SmallTest
283d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen    public void testNetworkRegistrationState() {
284d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        NetworkRegistrationState wwanVoiceRegState = new NetworkRegistrationState(
285d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                AccessNetworkConstants.TransportType.WWAN, NetworkRegistrationState.DOMAIN_CS,
286d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                0, 0, 0, false,
287d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                null, null, true, 0, 0, 0);
288d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
289d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
290d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        NetworkRegistrationState wwanDataRegState = new NetworkRegistrationState(
291d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                AccessNetworkConstants.TransportType.WWAN, NetworkRegistrationState.DOMAIN_PS,
292d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                0, 0, 0, false,
293d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                null, null, 0);
294d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
295d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        NetworkRegistrationState wlanRegState = new NetworkRegistrationState(
296d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                AccessNetworkConstants.TransportType.WLAN, NetworkRegistrationState.DOMAIN_PS,
297d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                0, 0, 0, false,
298d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                null, null);
299d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
300d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        ServiceState ss = new ServiceState();
301d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
302d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        ss.addNetworkRegistrationState(wwanVoiceRegState);
303d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        ss.addNetworkRegistrationState(wwanDataRegState);
304d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        ss.addNetworkRegistrationState(wlanRegState);
305d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
306d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WWAN,
307d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                NetworkRegistrationState.DOMAIN_CS), wwanVoiceRegState);
308d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WWAN,
309d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                NetworkRegistrationState.DOMAIN_PS), wwanDataRegState);
310d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WLAN,
311d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                NetworkRegistrationState.DOMAIN_PS), wlanRegState);
312d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen
313d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        wwanDataRegState = new NetworkRegistrationState(
314d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                AccessNetworkConstants.TransportType.WWAN, NetworkRegistrationState.DOMAIN_PS,
315d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                0, 0, 0, true,
316d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                null, null, 0);
317d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        ss.addNetworkRegistrationState(wwanDataRegState);
318d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen        assertEquals(ss.getNetworkRegistrationStates(AccessNetworkConstants.TransportType.WWAN,
319d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen                NetworkRegistrationState.DOMAIN_PS), wwanDataRegState);
320d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen    }
32199cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
32299cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    @SmallTest
32399cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    public void testDuplexMode_notLte() {
32499cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ServiceState ss = new ServiceState();
32599cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_GSM);
32699cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setChannelNumber(2400);
32799cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
32899cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_UNKNOWN);
32999cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    }
33099cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
33199cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    @SmallTest
33299cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    public void testDuplexMode_invalidEarfcn() {
33399cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ServiceState ss = new ServiceState();
33499cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
33599cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setChannelNumber(-1);
33699cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
33799cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_UNKNOWN);
33899cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
33999cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setChannelNumber(Integer.MAX_VALUE);
34099cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
34199cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_UNKNOWN);
34299cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    }
34399cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
34499cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    @SmallTest
34599cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    public void testDuplexMode_FddChannel() {
34699cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ServiceState ss = new ServiceState();
34799cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
34899cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setChannelNumber(2400); // band 5
34999cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
35099cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_FDD);
35199cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    }
35299cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
35399cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    @SmallTest
35499cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    public void testDuplexMode_TddChannel() {
35599cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ServiceState ss = new ServiceState();
35699cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setRilDataRadioTechnology(ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
35799cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        ss.setChannelNumber(36000); // band 33
35899cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach
35999cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach        assertEquals(ss.getDuplexMode(), ServiceState.DUPLEX_MODE_TDD);
36099cc5e6ad7be178e9b17e58ac55bb5136ef50ee9Eric Schwarzenbach    }
361d06d599321a587f0c697bda4c791a5f3618479d1Malcolm Chen}
362