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

Commit 782870d5 authored by Roy Chou's avatar Roy Chou
Browse files

fix(magnification): catch the unregister failing exception to prevent system crash

For b/399282180, the context intent receiver unregistering is called
when the FullScreenMagnificationGestureHandler#onDestroy, which implies
the handler is not needed anymore. That is, the fail execption when
unregistering would not affect the user experience, and it should not
make the system crash too.

Therefore, we use try-catch to catch the exception to prevent system
crash. Besides, since we still need more clues to identify the root
cause for the exception, we also log the exception for future
investigations.

This fix should be low risk, since we only catch the exception to
prevent the crash, and no logic changes.

Bug: 399282180
Flag: EXEMPT bugfix
Test: manually
      atest FullScreenMagnificationGestureHandlerTest
Change-Id: I916719958ce3954076a1ad240ffaf150d619cd16
parent c309da55
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -1745,6 +1745,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
     * BroadcastReceiver used to cancel the magnification shortcut when the screen turns off
     */
    private static class ScreenStateReceiver extends BroadcastReceiver {
        private static final String TAG = ScreenStateReceiver.class.getName();
        private final Context mContext;
        private final FullScreenMagnificationGestureHandler mGestureHandler;

@@ -1759,7 +1760,16 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
        }

        public void unregister() {
            try {
                mContext.unregisterReceiver(this);
            } catch (IllegalArgumentException exception) {
                // b/399282180: the unregister happens when the handler is destroyed (cleanup). The
                // cleanup process should not cause the system crash, also the failure of unregister
                // will not affect the user experience since it's for the destroyed handler.
                // Therefore, we use try-catch here, to catch the exception to prevent crash, and
                // log the exception for future investigations.
                Slog.e(TAG, "Failed to unregister receiver: " + exception);
            }
        }

        @Override