Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 576b6199 authored by Grace Jia's avatar Grace Jia
Browse files

Fix crash when service unbinding exception happens.

If the call screening service haven't been registered, trying to unbind
it will make the device crash. Wrap the unbinding process in a try-catch
block to avoid this crash.

Bug: 161952276
Test: atest TelecomUnitTests:CallScreeningServiceFilterTest
Change-Id: Ic4d8823efc4f91a866e6d5d72a0a94cc3438d232
parent 4debabe3
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -289,7 +289,12 @@ public class CallScreeningServiceFilter extends CallFilter {

    public void unbindCallScreeningService() {
        if (mConnection != null) {
            try {
                mContext.unbindService(mConnection);
            } catch (IllegalArgumentException e) {
                Log.i(this, "Exception when unbind service %s : %s", mConnection,
                        e.getMessage());
            }
        }
        mConnection = null;
    }
+14 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -209,6 +210,19 @@ public class CallScreeningServiceFilterTest extends TelecomTestCase {
        connection.onServiceDisconnected(COMPONENT_NAME);
    }

    @SmallTest
    @Test
    public void testUnbindingException() {
        // Make sure that exceptions when unbinding won't make the device crash.
        doThrow(new IllegalArgumentException()).when(mContext)
                .unbindService(nullable(ServiceConnection.class));
        CallScreeningServiceFilter filter = new CallScreeningServiceFilter(mCall, PKG_NAME,
                CallScreeningServiceFilter.PACKAGE_TYPE_CARRIER, mContext, mCallsManager,
                mAppLabelProxy, mParcelableCallUtilsConverter);
        filter.startFilterLookup(inputResult);
        filter.unbindCallScreeningService();
    }

    @SmallTest
    @Test
    public void testAllowCall() throws Exception {