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

Commit bee6f65e authored by linyuh's avatar linyuh Committed by android-build-merger
Browse files

Merge "Fix the crash caused by DialpadView's OnPreDrawListener." am: 5b6d823a

am: e027e72a

Change-Id: Iac4fbb51419f0697b3925e5388b193d27b3dcbc0
parents 4ae8d4a7 e027e72a
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -503,10 +503,26 @@ public class DialpadView extends LinearLayout {
    @Override
    public boolean onPreDraw() {
      if (!shouldAdjustKeySizes()) {
        return true; // Return true to proceed with the current drawing pass.
        // Return true to proceed with the current drawing pass.
        // Note that we must NOT remove this listener here. The fact that we don't need to adjust
        // keys at the moment doesn't mean they won't need adjustments in the future. For example,
        // when DialpadFragment is hidden, all keys are of the same size (0) and nothing needs to be
        // done. Removing the listener will cost us the ability to adjust them when they reappear.
        // It is only safe to remove the listener after adjusting keys for the first time. See the
        // comment below for more details.
        return true;
      }

      adjustKeySizes();

      // After all keys are adjusted for the first time, no more adjustments will be needed during
      // the rest of DialpadView's lifecycle. It is therefore safe to remove this listener.
      // Another important reason for removing the listener is that it can be triggered AFTER a
      // device orientation change but BEFORE DialpadView's onDetachedFromWindow() and
      // onFinishInflate() are called, i.e., the listener will attempt to adjust the layout before
      // it is inflated, which results in a crash.
      getViewTreeObserver().removeOnPreDrawListener(this);

      return false; // Return false to cancel the current drawing pass.
    }