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

Commit 2754a20c authored by Yi-Ling Chuang's avatar Yi-Ling Chuang
Browse files

Make the force stop dialog work properly in split screen

When it's in a multi-window mode, force stopping an app will lead to an
activity recreate, and the dialog fragment will also be recreated.
That's why the dialog still shows after the button is clicked.

Hence, dismiss the dialog before stopping the app to fix it.

Fixes: 231529730
Test: robotest
Change-Id: I75d27624f0c60bb617e7d1a92ffe01d3c0fbf7be
parent c53c5a90
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -90,6 +90,12 @@ public class ButtonActionDialogFragment extends InstrumentedDialogFragment imple

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // When it's in a multi-window mode, force stopping an app will lead to an activity
        // recreate, and the dialog fragment will also be recreated. So dismiss the dialog before
        // stopping the app.
        if (mId == ButtonActionDialogFragment.DialogType.FORCE_STOP) {
            dialog.dismiss();
        }
        final AppButtonsDialogListener lsn =
                (AppButtonsDialogListener) getTargetFragment();
        lsn.handleDialogClick(mId);
+17 −0
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@ package com.android.settings.applications.appinfo;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;

@@ -72,6 +74,21 @@ public class ButtonActionDialogFragmentTest {
        verify(mTargetFragment).handleDialogClick(anyInt());
    }

    @Test
    public void testOnClick_forceStop_dismissDialog() {
        ButtonActionDialogFragment fragment =
                spy(ButtonActionDialogFragment.newInstance(FORCE_STOP_ID));
        FragmentController.setupFragment(fragment, FragmentActivity.class, 0 /* containerViewId */,
                null /* bundle */);
        doReturn(mTargetFragment).when(fragment).getTargetFragment();
        doNothing().when(mTargetFragment).handleDialogClick(anyInt());
        final AlertDialog dialog = mock(AlertDialog.class);

        fragment.onClick(dialog, 0);

        verify(dialog).dismiss();
    }

    @Test
    public void testOnCreateDialog_forceStopDialog() {
        ButtonActionDialogFragment fragment = ButtonActionDialogFragment.newInstance(FORCE_STOP_ID);