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

Commit 06a390a1 authored by Behnam Heydarshahi's avatar Behnam Heydarshahi
Browse files

Dismiss lingering volume dialog

(1) Fault tolerance for the state where the dialog is not showing but
mShowing flag is set to false.

(2) Extra logging for better understanding the state of the dialog.

Bug: b/232606092

Test: Manual. Open volume dialog, adjust using volume buttons. Slider
should move smoothly and eventually dialog should dismiss smoothly.

Change-Id: Ie914f97925d8defb8c57818e5e7ffe958936336c
parent 485a8116
Loading
Loading
Loading
Loading
+19 −5
Original line number Original line Diff line number Diff line
@@ -404,6 +404,7 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,


    @Override
    @Override
    public void destroy() {
    public void destroy() {
        Log.d(TAG, "destroy() called");
        mController.removeCallback(mControllerCallbackH);
        mController.removeCallback(mControllerCallbackH);
        mHandler.removeCallbacksAndMessages(null);
        mHandler.removeCallbacksAndMessages(null);
        mConfigurationController.removeCallback(this);
        mConfigurationController.removeCallback(this);
@@ -465,6 +466,7 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
    }
    }


    private void initDialog(int lockTaskModeState) {
    private void initDialog(int lockTaskModeState) {
        Log.d(TAG, "initDialog: called!");
        mDialog = new CustomDialog(mContext);
        mDialog = new CustomDialog(mContext);
        initDimens();
        initDimens();


@@ -1269,7 +1271,7 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
    }
    }


    protected void tryToRemoveCaptionsTooltip() {
    protected void tryToRemoveCaptionsTooltip() {
        if (mHasSeenODICaptionsTooltip && mODICaptionsTooltipView != null) {
        if (mHasSeenODICaptionsTooltip && mODICaptionsTooltipView != null && mDialog != null) {
            ViewGroup container = mDialog.findViewById(R.id.volume_dialog_container);
            ViewGroup container = mDialog.findViewById(R.id.volume_dialog_container);
            container.removeView(mODICaptionsTooltipView);
            container.removeView(mODICaptionsTooltipView);
            mODICaptionsTooltipView = null;
            mODICaptionsTooltipView = null;
@@ -1476,8 +1478,16 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,


        mHandler.removeMessages(H.DISMISS);
        mHandler.removeMessages(H.DISMISS);
        mHandler.removeMessages(H.SHOW);
        mHandler.removeMessages(H.SHOW);
        if (mIsAnimatingDismiss) {

            Log.d(TAG, "dismissH: isAnimatingDismiss");
        boolean showingStateInconsistent = !mShowing && mDialog != null && mDialog.isShowing();
        // If incorrectly assuming dialog is not showing, continue and make the state consistent.
        if (showingStateInconsistent) {
            Log.d(TAG, "dismissH: volume dialog possible in inconsistent state:"
                    + "mShowing=" + mShowing + ", mDialog==null?" + (mDialog == null));
        }
        if (mIsAnimatingDismiss && !showingStateInconsistent) {
            Log.d(TAG, "dismissH: skipping dismiss because isAnimatingDismiss is true"
                    + " and showingStateInconsistent is false");
            Trace.endSection();
            Trace.endSection();
            return;
            return;
        }
        }
@@ -1495,8 +1505,12 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
                .setDuration(mDialogHideAnimationDurationMs)
                .setDuration(mDialogHideAnimationDurationMs)
                .setInterpolator(new SystemUIInterpolators.LogAccelerateInterpolator())
                .setInterpolator(new SystemUIInterpolators.LogAccelerateInterpolator())
                .withEndAction(() -> mHandler.postDelayed(() -> {
                .withEndAction(() -> mHandler.postDelayed(() -> {
                    if (mController != null) {
                        mController.notifyVisible(false);
                        mController.notifyVisible(false);
                    }
                    if (mDialog != null) {
                        mDialog.dismiss();
                        mDialog.dismiss();
                    }
                    tryToRemoveCaptionsTooltip();
                    tryToRemoveCaptionsTooltip();
                    mIsAnimatingDismiss = false;
                    mIsAnimatingDismiss = false;