Reset telephony stack during Reset Mobile Network flow
This CL introduces two more steps to restart Phone process and RILD
during the Reset mobile network flow by the help of the
TelephonyContentProvider which has been used by Pixel Adaptive
Connectivity Services ("SCONE") for a while.
The additional reset options can resolve issues like resources leak
and internal state stuck, effectively recover telephony stack into
fresh state.
The reset options are performed in the background and have no impact
on UX of the reset flow.
Bug: 271921464
Test: ResetNetworkOperationBuilderTest
Test: Feature test with both flag on and off
Change-Id: If09d20d79e908dd43f3f654fb7cca7f713b7f03a
This commit is contained in:
@@ -16,13 +16,20 @@
|
||||
|
||||
package com.android.settings.network;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.isNull;
|
||||
import static org.mockito.Mockito.anyInt;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkPolicyManager;
|
||||
@@ -59,6 +66,9 @@ public class ResetNetworkOperationBuilderTest {
|
||||
private TelephonyManager mTelephonyManager;
|
||||
@Mock
|
||||
private NetworkPolicyManager mNetworkPolicyManager;
|
||||
@Mock
|
||||
private ContentProvider mContentProvider;;
|
||||
|
||||
|
||||
private Context mContext;
|
||||
private ResetNetworkOperationBuilder mBuilder;
|
||||
@@ -67,6 +77,7 @@ public class ResetNetworkOperationBuilderTest {
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
doReturn(ContentResolver.wrap(mContentProvider)).when(mContext).getContentResolver();
|
||||
|
||||
mBuilder = spy(new ResetNetworkOperationBuilder(mContext));
|
||||
}
|
||||
@@ -171,4 +182,42 @@ public class ResetNetworkOperationBuilderTest {
|
||||
|
||||
verify(mTelephonyManager, times(2)).resetIms(anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartPhoneProcess_withoutTelephonyContentProvider_shouldNotCrash() {
|
||||
doThrow(new IllegalArgumentException()).when(mContentProvider).call(
|
||||
anyString(), anyString(), anyString(), any());
|
||||
|
||||
mBuilder.restartPhoneProcess();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartRild_withoutTelephonyContentProvider_shouldNotCrash() {
|
||||
doThrow(new IllegalArgumentException()).when(mContentProvider).call(
|
||||
anyString(), anyString(), anyString(), any());
|
||||
|
||||
mBuilder.restartRild();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartPhoneProcess_withTelephonyContentProvider_shouldCallRestartPhoneProcess() {
|
||||
mBuilder.restartPhoneProcess();
|
||||
|
||||
verify(mContentProvider).call(
|
||||
eq(mBuilder.getResetTelephonyContentProviderAuthority()),
|
||||
eq(ResetNetworkOperationBuilder.METHOD_RESTART_PHONE_PROCESS),
|
||||
isNull(),
|
||||
isNull());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartRild_withTelephonyContentProvider_shouldCallRestartRild() {
|
||||
mBuilder.restartRild();
|
||||
|
||||
verify(mContentProvider).call(
|
||||
eq(mBuilder.getResetTelephonyContentProviderAuthority()),
|
||||
eq(ResetNetworkOperationBuilder.METHOD_RESTART_RILD),
|
||||
isNull(),
|
||||
isNull());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user