Home | History | Annotate | Download | only in telephony
      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 package com.android.internal.telephony;
     17 
     18 import org.junit.After;
     19 import org.junit.Before;
     20 import org.junit.Test;
     21 import org.mockito.Mock;
     22 
     23 import java.util.List;
     24 import java.util.ArrayList;
     25 
     26 import static org.mockito.Matchers.anyString;
     27 import static org.mockito.Matchers.eq;
     28 import static org.mockito.Mockito.doReturn;
     29 import static org.junit.Assert.assertEquals;
     30 import static org.mockito.Mockito.verify;
     31 import static org.mockito.Mockito.anyInt;
     32 import static org.mockito.Mockito.times;
     33 import org.mockito.ArgumentCaptor;
     34 import android.telephony.CellInfo;
     35 import android.telephony.DisconnectCause;
     36 import android.telephony.PreciseCallState;
     37 import android.telephony.PreciseDisconnectCause;
     38 import android.telephony.SignalStrength;
     39 import android.telephony.TelephonyManager;
     40 import android.telephony.VoLteServiceState;
     41 import android.telephony.gsm.GsmCellLocation;
     42 import android.os.Bundle;
     43 import android.os.Process;
     44 import android.os.WorkSource;
     45 import android.test.suitebuilder.annotation.SmallTest;
     46 
     47 public class DefaultPhoneNotifierTest extends TelephonyTest {
     48 
     49     private DefaultPhoneNotifier mDefaultPhoneNotifierUT;
     50     @Mock
     51     ITelephonyRegistry.Stub mTelephonyRegisteryMock;
     52     @Mock
     53     SignalStrength mSignalStrength;
     54     @Mock
     55     CellInfo mCellInfo;
     56     @Mock
     57     GsmCdmaCall mForeGroundCall;
     58     @Mock
     59     GsmCdmaCall mBackGroundCall;
     60     @Mock
     61     GsmCdmaCall mRingingCall;
     62 
     63     @Before
     64     public void setUp() throws Exception {
     65         super.setUp(getClass().getSimpleName());
     66         mServiceManagerMockedServices.put("telephony.registry", mTelephonyRegisteryMock);
     67         doReturn(mTelephonyRegisteryMock).when(mTelephonyRegisteryMock)
     68                 .queryLocalInterface(anyString());
     69 
     70         mDefaultPhoneNotifierUT = new DefaultPhoneNotifier();
     71     }
     72 
     73     @After
     74     public void tearDown() throws Exception {
     75         super.tearDown();
     76     }
     77 
     78     @Test @SmallTest
     79     public void testNotifyCallForwarding() throws Exception {
     80         mDefaultPhoneNotifierUT.notifyCallForwardingChanged(mPhone);
     81         verify(mTelephonyRegisteryMock).notifyCallForwardingChangedForSubscriber(eq(0), eq(false));
     82 
     83         doReturn(true).when(mPhone).getCallForwardingIndicator();
     84         doReturn(1).when(mPhone).getSubId();
     85         mDefaultPhoneNotifierUT.notifyCallForwardingChanged(mPhone);
     86         verify(mTelephonyRegisteryMock).notifyCallForwardingChangedForSubscriber(eq(1), eq(true));
     87     }
     88 
     89     @Test @SmallTest
     90     public void testNotifyDataActivity() throws Exception {
     91         //mock data activity state
     92         doReturn(Phone.DataActivityState.NONE).when(mPhone).getDataActivityState();
     93         mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
     94         verify(mTelephonyRegisteryMock).notifyDataActivityForSubscriber(eq(0),
     95                 eq(TelephonyManager.DATA_ACTIVITY_NONE));
     96 
     97         doReturn(1).when(mPhone).getSubId();
     98         doReturn(Phone.DataActivityState.DATAIN).when(mPhone).getDataActivityState();
     99         mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
    100         verify(mTelephonyRegisteryMock).notifyDataActivityForSubscriber(eq(1),
    101                 eq(TelephonyManager.DATA_ACTIVITY_IN));
    102     }
    103 
    104     @Test @SmallTest
    105     public void testNotifySignalStrength() throws Exception {
    106         //mock signal strength value
    107         doReturn(99).when(mSignalStrength).getGsmSignalStrength();
    108         doReturn(mSignalStrength).when(mPhone).getSignalStrength();
    109         ArgumentCaptor<SignalStrength> signalStrengthArgumentCaptor =
    110                 ArgumentCaptor.forClass(SignalStrength.class);
    111 
    112         mDefaultPhoneNotifierUT.notifySignalStrength(mPhone);
    113         verify(mTelephonyRegisteryMock).notifySignalStrengthForPhoneId(eq(0), eq(0),
    114                 signalStrengthArgumentCaptor.capture());
    115         assertEquals(99, signalStrengthArgumentCaptor.getValue().getGsmSignalStrength());
    116 
    117         doReturn(1).when(mPhone).getSubId();
    118         doReturn(2).when(mPhone).getPhoneId();
    119         mDefaultPhoneNotifierUT.notifySignalStrength(mPhone);
    120         verify(mTelephonyRegisteryMock).notifySignalStrengthForPhoneId(eq(2), eq(1),
    121                 signalStrengthArgumentCaptor.capture());
    122         assertEquals(99, signalStrengthArgumentCaptor.getValue().getGsmSignalStrength());
    123     }
    124 
    125     @Test @SmallTest
    126     public void testNotifyCellInfo() throws Exception {
    127         //mock cellinfo
    128         List<CellInfo> mCellInfoList = new ArrayList<>();
    129         mCellInfoList.add(mCellInfo);
    130         ArgumentCaptor<List> cellInfoArgumentCaptor = ArgumentCaptor.forClass(List.class);
    131 
    132         mDefaultPhoneNotifierUT.notifyCellInfo(mPhone, mCellInfoList);
    133 
    134         verify(mTelephonyRegisteryMock).notifyCellInfoForSubscriber(eq(0),
    135                 cellInfoArgumentCaptor.capture());
    136         assertEquals(mCellInfo, cellInfoArgumentCaptor.getValue().get(0));
    137     }
    138 
    139     @Test @SmallTest
    140     public void testNotifyMessageWaiting() throws Exception {
    141         doReturn(1).when(mPhone).getPhoneId();
    142         mDefaultPhoneNotifierUT.notifyMessageWaitingChanged(mPhone);
    143         verify(mTelephonyRegisteryMock).notifyMessageWaitingChangedForPhoneId(1, 0, false);
    144 
    145         doReturn(2).when(mPhone).getPhoneId();
    146         mDefaultPhoneNotifierUT.notifyMessageWaitingChanged(mPhone);
    147         verify(mTelephonyRegisteryMock).notifyMessageWaitingChangedForPhoneId(2, 0, false);
    148 
    149         doReturn(1).when(mPhone).getSubId();
    150         mDefaultPhoneNotifierUT.notifyMessageWaitingChanged(mPhone);
    151         verify(mTelephonyRegisteryMock).notifyMessageWaitingChangedForPhoneId(2, 1, false);
    152 
    153         doReturn(true).when(mPhone).getMessageWaitingIndicator();
    154         mDefaultPhoneNotifierUT.notifyMessageWaitingChanged(mPhone);
    155         verify(mTelephonyRegisteryMock).notifyMessageWaitingChangedForPhoneId(2, 1, true);
    156     }
    157 
    158     @Test @SmallTest
    159     public void testNotifyDisconnectCause() throws Exception {
    160         mDefaultPhoneNotifierUT.notifyDisconnectCause(DisconnectCause.NOT_VALID,
    161                 PreciseDisconnectCause.FDN_BLOCKED);
    162         verify(mTelephonyRegisteryMock).notifyDisconnectCause(DisconnectCause.NOT_VALID,
    163                 PreciseDisconnectCause.FDN_BLOCKED);
    164 
    165         mDefaultPhoneNotifierUT.notifyDisconnectCause(DisconnectCause.LOCAL,
    166                 PreciseDisconnectCause.CHANNEL_NOT_AVAIL);
    167         verify(mTelephonyRegisteryMock).notifyDisconnectCause(DisconnectCause.LOCAL,
    168                 PreciseDisconnectCause.CHANNEL_NOT_AVAIL);
    169     }
    170 
    171     @Test @SmallTest
    172     public void testNotifyDataConnectionFailed() throws Exception {
    173         mDefaultPhoneNotifierUT.notifyDataConnectionFailed(mPhone, "BUSY", "APN_0");
    174         verify(mTelephonyRegisteryMock).notifyDataConnectionFailedForSubscriber(0, "BUSY", "APN_0");
    175 
    176         mDefaultPhoneNotifierUT.notifyDataConnectionFailed(mPhone, "LOCAL", "APN_0");
    177         verify(mTelephonyRegisteryMock).notifyDataConnectionFailedForSubscriber(0, "LOCAL",
    178                 "APN_0");
    179 
    180         mDefaultPhoneNotifierUT.notifyDataConnectionFailed(mPhone, "LOCAL", "APN_1");
    181         verify(mTelephonyRegisteryMock).notifyDataConnectionFailedForSubscriber(0, "LOCAL",
    182                 "APN_1");
    183 
    184         doReturn(1).when(mPhone).getSubId();
    185         mDefaultPhoneNotifierUT.notifyDataConnectionFailed(mPhone, "LOCAL", "APN_1");
    186         verify(mTelephonyRegisteryMock).notifyDataConnectionFailedForSubscriber(1, "LOCAL",
    187                 "APN_1");
    188     }
    189 
    190     @Test @SmallTest
    191     public void testNotifyPreciseCallState() throws Exception {
    192 
    193         //mock forground/background/ringing call and call state
    194         doReturn(Call.State.IDLE).when(mForeGroundCall).getState();
    195         doReturn(Call.State.IDLE).when(mBackGroundCall).getState();
    196         doReturn(Call.State.IDLE).when(mRingingCall).getState();
    197 
    198         mDefaultPhoneNotifierUT.notifyPreciseCallState(mPhone);
    199         verify(mTelephonyRegisteryMock, times(0)).notifyPreciseCallState(anyInt(), anyInt(),
    200                 anyInt());
    201 
    202         doReturn(mForeGroundCall).when(mPhone).getForegroundCall();
    203         mDefaultPhoneNotifierUT.notifyPreciseCallState(mPhone);
    204         verify(mTelephonyRegisteryMock, times(0)).notifyPreciseCallState(anyInt(), anyInt(),
    205                 anyInt());
    206 
    207         doReturn(mBackGroundCall).when(mPhone).getBackgroundCall();
    208         mDefaultPhoneNotifierUT.notifyPreciseCallState(mPhone);
    209         verify(mTelephonyRegisteryMock, times(0)).notifyPreciseCallState(anyInt(), anyInt(),
    210                 anyInt());
    211 
    212         doReturn(mRingingCall).when(mPhone).getRingingCall();
    213         mDefaultPhoneNotifierUT.notifyPreciseCallState(mPhone);
    214         verify(mTelephonyRegisteryMock, times(1)).notifyPreciseCallState(
    215                 PreciseCallState.PRECISE_CALL_STATE_IDLE,
    216                 PreciseCallState.PRECISE_CALL_STATE_IDLE,
    217                 PreciseCallState.PRECISE_CALL_STATE_IDLE);
    218 
    219         doReturn(Call.State.ACTIVE).when(mForeGroundCall).getState();
    220         mDefaultPhoneNotifierUT.notifyPreciseCallState(mPhone);
    221         verify(mTelephonyRegisteryMock, times(1)).notifyPreciseCallState(
    222                 PreciseCallState.PRECISE_CALL_STATE_IDLE,
    223                 PreciseCallState.PRECISE_CALL_STATE_ACTIVE,
    224                 PreciseCallState.PRECISE_CALL_STATE_IDLE);
    225 
    226         doReturn(Call.State.HOLDING).when(mBackGroundCall).getState();
    227         mDefaultPhoneNotifierUT.notifyPreciseCallState(mPhone);
    228         verify(mTelephonyRegisteryMock, times(1)).notifyPreciseCallState(
    229                 PreciseCallState.PRECISE_CALL_STATE_IDLE,
    230                 PreciseCallState.PRECISE_CALL_STATE_ACTIVE,
    231                 PreciseCallState.PRECISE_CALL_STATE_HOLDING);
    232 
    233         doReturn(Call.State.ALERTING).when(mRingingCall).getState();
    234         mDefaultPhoneNotifierUT.notifyPreciseCallState(mPhone);
    235         verify(mTelephonyRegisteryMock, times(1)).notifyPreciseCallState(
    236                 PreciseCallState.PRECISE_CALL_STATE_ALERTING,
    237                 PreciseCallState.PRECISE_CALL_STATE_ACTIVE,
    238                 PreciseCallState.PRECISE_CALL_STATE_HOLDING);
    239     }
    240 
    241     @Test @SmallTest
    242     public void testNotifyCellLocation() throws Exception {
    243         // mock gsm cell location
    244         GsmCellLocation mGsmCellLocation = new GsmCellLocation();
    245         mGsmCellLocation.setLacAndCid(2, 3);
    246         doReturn(mGsmCellLocation).when(mPhone).getCellLocation();
    247         ArgumentCaptor<Bundle> cellLocationCapture =
    248                 ArgumentCaptor.forClass(Bundle.class);
    249 
    250         mDefaultPhoneNotifierUT.notifyCellLocation(mPhone);
    251         verify(mTelephonyRegisteryMock).notifyCellLocationForSubscriber(eq(0),
    252                 cellLocationCapture.capture());
    253         assertEquals(2, cellLocationCapture.getValue().getInt("lac"));
    254         assertEquals(3, cellLocationCapture.getValue().getInt("cid"));
    255         assertEquals(-1, cellLocationCapture.getValue().getInt("psc"));
    256 
    257         doReturn(1).when(mPhone).getSubId();
    258         mGsmCellLocation.setPsc(5);
    259         mDefaultPhoneNotifierUT.notifyCellLocation(mPhone);
    260         verify(mTelephonyRegisteryMock).notifyCellLocationForSubscriber(eq(1),
    261                 cellLocationCapture.capture());
    262         assertEquals(2, cellLocationCapture.getValue().getInt("lac"));
    263         assertEquals(3, cellLocationCapture.getValue().getInt("cid"));
    264         assertEquals(5, cellLocationCapture.getValue().getInt("psc"));
    265     }
    266 
    267     @Test @SmallTest
    268     public void testNotifyOtaspChanged() throws Exception {
    269         mDefaultPhoneNotifierUT.notifyOtaspChanged(mPhone, TelephonyManager.OTASP_NEEDED);
    270         verify(mTelephonyRegisteryMock).notifyOtaspChanged(TelephonyManager.OTASP_NEEDED);
    271 
    272         mDefaultPhoneNotifierUT.notifyOtaspChanged(mPhone, TelephonyManager.OTASP_UNKNOWN);
    273         verify(mTelephonyRegisteryMock).notifyOtaspChanged(TelephonyManager.OTASP_UNKNOWN);
    274     }
    275 
    276     @Test @SmallTest
    277     public void testNotifyVoLteServiceStateChanged() throws Exception {
    278         VoLteServiceState state = new VoLteServiceState(VoLteServiceState.NOT_SUPPORTED);
    279         mDefaultPhoneNotifierUT.notifyVoLteServiceStateChanged(mPhone, state);
    280         verify(mTelephonyRegisteryMock).notifyVoLteServiceStateChanged(state);
    281 
    282         state = new VoLteServiceState(VoLteServiceState.HANDOVER_COMPLETED);
    283         mDefaultPhoneNotifierUT.notifyVoLteServiceStateChanged(mPhone, state);
    284         verify(mTelephonyRegisteryMock).notifyVoLteServiceStateChanged(state);
    285     }
    286 }
    287