Loading AndroidManifest.xml +1 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ <uses-permission android:name="android.permission.REMAP_MODIFIER_KEYS" /> <uses-permission android:name="android.permission.ACCESS_GPU_SERVICE" /> <uses-permission android:name="android.permission.MANAGE_GAME_MODE" /> <uses-permission android:name="android.permission.RESTART_PHONE_PROCESS" /> <uses-permission android:name="android.permission.RESTART_TELEPHONY_PROCESS" /> <uses-permission android:name="android.permission.MANAGE_ENHANCED_CONFIRMATION_STATES" /> <uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" /> Loading src/com/android/settings/ResetNetworkRequest.java +3 −3 Original line number Diff line number Diff line Loading @@ -271,12 +271,12 @@ public class ResetNetworkRequest { builder.resetIms(mSubscriptionIdToResetIms); } // Reset phone process and RILD may impact above components, keep them at the end if ((mResetOptions & RESET_PHONE_PROCESS) != 0) { builder.restartPhoneProcess(); } if ((mResetOptions & RESET_RILD) != 0) { builder.restartRild(); } if ((mResetOptions & RESET_PHONE_PROCESS) != 0) { builder.restartPhoneProcess(); } return builder; } } src/com/android/settings/network/ResetNetworkOperationBuilder.java +31 −20 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.network; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.Context; import android.net.ConnectivityManager; Loading @@ -28,11 +29,14 @@ import android.net.wifi.WifiManager; import android.net.wifi.p2p.WifiP2pManager; import android.os.Looper; import android.os.RecoverySystem; import android.os.RemoteException; import android.os.SystemClock; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.ResetNetworkRequest; Loading Loading @@ -257,15 +261,15 @@ public class ResetNetworkOperationBuilder { */ public ResetNetworkOperationBuilder restartPhoneProcess() { Runnable runnable = () -> { try { mContext.getContentResolver().call( getResetTelephonyContentProviderAuthority(), METHOD_RESTART_PHONE_PROCESS, /* arg= */ null, /* extras= */ null); // Unstable content provider can avoid us getting killed together with phone process try (ContentProviderClient client = getUnstableTelephonyContentProviderClient()) { if (client != null) { client.call(METHOD_RESTART_PHONE_PROCESS, /* arg= */ null, /* extra= */ null); Log.i(TAG, "Phone process was restarted."); } catch (IllegalArgumentException iae) { Log.w(TAG, "Fail to restart phone process: " + iae); } } catch (RemoteException re) { // It's normal to throw RE since phone process immediately dies Log.i(TAG, "Phone process has been restarted: " + re); } }; mResetSequence.add(runnable); Loading @@ -279,15 +283,13 @@ public class ResetNetworkOperationBuilder { */ public ResetNetworkOperationBuilder restartRild() { Runnable runnable = () -> { try { mContext.getContentResolver().call( getResetTelephonyContentProviderAuthority(), METHOD_RESTART_RILD, /* arg= */ null, /* extras= */ null); try (ContentProviderClient client = getUnstableTelephonyContentProviderClient()) { if (client != null) { client.call(METHOD_RESTART_RILD, /* arg= */ null, /* extra= */ null); Log.i(TAG, "RILD was restarted."); } catch (IllegalArgumentException iae) { Log.w(TAG, "Fail to restart RILD: " + iae); } } catch (RemoteException re) { Log.w(TAG, "Fail to restart RILD: " + re); } }; mResetSequence.add(runnable); Loading Loading @@ -322,9 +324,18 @@ public class ResetNetworkOperationBuilder { * @return the authority of the telephony content provider that support methods * resetPhoneProcess and resetRild. */ @VisibleForTesting String getResetTelephonyContentProviderAuthority() { private String getResetTelephonyContentProviderAuthority() { return mContext.getResources().getString( R.string.reset_telephony_stack_content_provider_authority); } /** * @return the unstable content provider to avoid us getting killed with phone process */ @Nullable @VisibleForTesting public ContentProviderClient getUnstableTelephonyContentProviderClient() { return mContext.getContentResolver().acquireUnstableContentProviderClient( getResetTelephonyContentProviderAuthority()); } } tests/unit/src/com/android/settings/network/ResetNetworkOperationBuilderTest.java +15 −20 Original line number Diff line number Diff line Loading @@ -16,20 +16,16 @@ 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.ContentProviderClient; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkPolicyManager; Loading Loading @@ -67,7 +63,7 @@ public class ResetNetworkOperationBuilderTest { @Mock private NetworkPolicyManager mNetworkPolicyManager; @Mock private ContentProvider mContentProvider;; private ContentProviderClient mContentProviderClient; private Context mContext; Loading @@ -77,9 +73,8 @@ 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)); doReturn(mContentProviderClient).when(mBuilder).getUnstableTelephonyContentProviderClient(); } @Test Loading Loading @@ -184,38 +179,38 @@ public class ResetNetworkOperationBuilderTest { } @Test public void restartPhoneProcess_withoutTelephonyContentProvider_shouldNotCrash() { doThrow(new IllegalArgumentException()).when(mContentProvider).call( anyString(), anyString(), anyString(), any()); public void restartPhoneProcess_withoutTelephonyContentProvider_shouldNotCrash() throws Exception { doReturn(null).when(mBuilder).getUnstableTelephonyContentProviderClient(); mBuilder.restartPhoneProcess().build().run(); } @Test public void restartRild_withoutTelephonyContentProvider_shouldNotCrash() { doThrow(new IllegalArgumentException()).when(mContentProvider).call( anyString(), anyString(), anyString(), any()); public void restartRild_withoutTelephonyContentProvider_shouldNotCrash() throws Exception { doReturn(null).when(mBuilder).getUnstableTelephonyContentProviderClient(); mBuilder.restartRild().build().run(); } @Test public void restartPhoneProcess_withTelephonyContentProvider_shouldCallRestartPhoneProcess() { public void restartPhoneProcess_withTelephonyContentProvider_shouldCallRestartPhoneProcess() throws Exception { mBuilder.restartPhoneProcess().build().run(); verify(mContentProvider).call( eq(mBuilder.getResetTelephonyContentProviderAuthority()), verify(mContentProviderClient).call( eq(ResetNetworkOperationBuilder.METHOD_RESTART_PHONE_PROCESS), isNull(), isNull()); } @Test public void restartRild_withTelephonyContentProvider_shouldCallRestartRild() { public void restartRild_withTelephonyContentProvider_shouldCallRestartRild() throws Exception { mBuilder.restartRild().build().run(); verify(mContentProvider).call( eq(mBuilder.getResetTelephonyContentProviderAuthority()), verify(mContentProviderClient).call( eq(ResetNetworkOperationBuilder.METHOD_RESTART_RILD), isNull(), isNull()); Loading Loading
AndroidManifest.xml +1 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ <uses-permission android:name="android.permission.REMAP_MODIFIER_KEYS" /> <uses-permission android:name="android.permission.ACCESS_GPU_SERVICE" /> <uses-permission android:name="android.permission.MANAGE_GAME_MODE" /> <uses-permission android:name="android.permission.RESTART_PHONE_PROCESS" /> <uses-permission android:name="android.permission.RESTART_TELEPHONY_PROCESS" /> <uses-permission android:name="android.permission.MANAGE_ENHANCED_CONFIRMATION_STATES" /> <uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" /> Loading
src/com/android/settings/ResetNetworkRequest.java +3 −3 Original line number Diff line number Diff line Loading @@ -271,12 +271,12 @@ public class ResetNetworkRequest { builder.resetIms(mSubscriptionIdToResetIms); } // Reset phone process and RILD may impact above components, keep them at the end if ((mResetOptions & RESET_PHONE_PROCESS) != 0) { builder.restartPhoneProcess(); } if ((mResetOptions & RESET_RILD) != 0) { builder.restartRild(); } if ((mResetOptions & RESET_PHONE_PROCESS) != 0) { builder.restartPhoneProcess(); } return builder; } }
src/com/android/settings/network/ResetNetworkOperationBuilder.java +31 −20 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.network; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.Context; import android.net.ConnectivityManager; Loading @@ -28,11 +29,14 @@ import android.net.wifi.WifiManager; import android.net.wifi.p2p.WifiP2pManager; import android.os.Looper; import android.os.RecoverySystem; import android.os.RemoteException; import android.os.SystemClock; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.ResetNetworkRequest; Loading Loading @@ -257,15 +261,15 @@ public class ResetNetworkOperationBuilder { */ public ResetNetworkOperationBuilder restartPhoneProcess() { Runnable runnable = () -> { try { mContext.getContentResolver().call( getResetTelephonyContentProviderAuthority(), METHOD_RESTART_PHONE_PROCESS, /* arg= */ null, /* extras= */ null); // Unstable content provider can avoid us getting killed together with phone process try (ContentProviderClient client = getUnstableTelephonyContentProviderClient()) { if (client != null) { client.call(METHOD_RESTART_PHONE_PROCESS, /* arg= */ null, /* extra= */ null); Log.i(TAG, "Phone process was restarted."); } catch (IllegalArgumentException iae) { Log.w(TAG, "Fail to restart phone process: " + iae); } } catch (RemoteException re) { // It's normal to throw RE since phone process immediately dies Log.i(TAG, "Phone process has been restarted: " + re); } }; mResetSequence.add(runnable); Loading @@ -279,15 +283,13 @@ public class ResetNetworkOperationBuilder { */ public ResetNetworkOperationBuilder restartRild() { Runnable runnable = () -> { try { mContext.getContentResolver().call( getResetTelephonyContentProviderAuthority(), METHOD_RESTART_RILD, /* arg= */ null, /* extras= */ null); try (ContentProviderClient client = getUnstableTelephonyContentProviderClient()) { if (client != null) { client.call(METHOD_RESTART_RILD, /* arg= */ null, /* extra= */ null); Log.i(TAG, "RILD was restarted."); } catch (IllegalArgumentException iae) { Log.w(TAG, "Fail to restart RILD: " + iae); } } catch (RemoteException re) { Log.w(TAG, "Fail to restart RILD: " + re); } }; mResetSequence.add(runnable); Loading Loading @@ -322,9 +324,18 @@ public class ResetNetworkOperationBuilder { * @return the authority of the telephony content provider that support methods * resetPhoneProcess and resetRild. */ @VisibleForTesting String getResetTelephonyContentProviderAuthority() { private String getResetTelephonyContentProviderAuthority() { return mContext.getResources().getString( R.string.reset_telephony_stack_content_provider_authority); } /** * @return the unstable content provider to avoid us getting killed with phone process */ @Nullable @VisibleForTesting public ContentProviderClient getUnstableTelephonyContentProviderClient() { return mContext.getContentResolver().acquireUnstableContentProviderClient( getResetTelephonyContentProviderAuthority()); } }
tests/unit/src/com/android/settings/network/ResetNetworkOperationBuilderTest.java +15 −20 Original line number Diff line number Diff line Loading @@ -16,20 +16,16 @@ 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.ContentProviderClient; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkPolicyManager; Loading Loading @@ -67,7 +63,7 @@ public class ResetNetworkOperationBuilderTest { @Mock private NetworkPolicyManager mNetworkPolicyManager; @Mock private ContentProvider mContentProvider;; private ContentProviderClient mContentProviderClient; private Context mContext; Loading @@ -77,9 +73,8 @@ 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)); doReturn(mContentProviderClient).when(mBuilder).getUnstableTelephonyContentProviderClient(); } @Test Loading Loading @@ -184,38 +179,38 @@ public class ResetNetworkOperationBuilderTest { } @Test public void restartPhoneProcess_withoutTelephonyContentProvider_shouldNotCrash() { doThrow(new IllegalArgumentException()).when(mContentProvider).call( anyString(), anyString(), anyString(), any()); public void restartPhoneProcess_withoutTelephonyContentProvider_shouldNotCrash() throws Exception { doReturn(null).when(mBuilder).getUnstableTelephonyContentProviderClient(); mBuilder.restartPhoneProcess().build().run(); } @Test public void restartRild_withoutTelephonyContentProvider_shouldNotCrash() { doThrow(new IllegalArgumentException()).when(mContentProvider).call( anyString(), anyString(), anyString(), any()); public void restartRild_withoutTelephonyContentProvider_shouldNotCrash() throws Exception { doReturn(null).when(mBuilder).getUnstableTelephonyContentProviderClient(); mBuilder.restartRild().build().run(); } @Test public void restartPhoneProcess_withTelephonyContentProvider_shouldCallRestartPhoneProcess() { public void restartPhoneProcess_withTelephonyContentProvider_shouldCallRestartPhoneProcess() throws Exception { mBuilder.restartPhoneProcess().build().run(); verify(mContentProvider).call( eq(mBuilder.getResetTelephonyContentProviderAuthority()), verify(mContentProviderClient).call( eq(ResetNetworkOperationBuilder.METHOD_RESTART_PHONE_PROCESS), isNull(), isNull()); } @Test public void restartRild_withTelephonyContentProvider_shouldCallRestartRild() { public void restartRild_withTelephonyContentProvider_shouldCallRestartRild() throws Exception { mBuilder.restartRild().build().run(); verify(mContentProvider).call( eq(mBuilder.getResetTelephonyContentProviderAuthority()), verify(mContentProviderClient).call( eq(ResetNetworkOperationBuilder.METHOD_RESTART_RILD), isNull(), isNull()); Loading