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

Commit 0972a9f3 authored by Yiyi Shen's avatar Yiyi Shen Committed by Android (Google) Code Review
Browse files

Merge "[Audiosharing] Finish handler activity when dialog destroy" into main

parents 11b78c6f c9d18f17
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;

@@ -35,6 +36,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.utils.ThreadUtils;

import java.util.List;
@@ -212,6 +214,18 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag
        return builder.build();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        FragmentActivity activity = getActivity();
        if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice()
                && activity instanceof AudioSharingJoinHandlerActivity
                && !activity.isChangingConfigurations() && !activity.isFinishing()) {
            Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName());
            activity.finish();
        }
    }

    private static void logDialogAutoDismiss(AlertDialog dialog) {
        var unused =
                ThreadUtils.postOnBackgroundThread(
+14 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;

@@ -35,6 +36,7 @@ import com.android.settings.bluetooth.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;

import java.util.List;

@@ -197,6 +199,18 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment {
        return dialog;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        FragmentActivity activity = getActivity();
        if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice()
                && activity instanceof AudioSharingJoinHandlerActivity
                && !activity.isChangingConfigurations() && !activity.isFinishing()) {
            Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName());
            activity.finish();
        }
    }

    private static void updateDialog(
            List<AudioSharingDeviceItem> deviceItems,
            String newDeviceName,
+14 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;

@@ -35,6 +36,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.utils.ThreadUtils;

import com.google.common.collect.Iterables;
@@ -218,6 +220,18 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment {
        return dialog;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        FragmentActivity activity = getActivity();
        if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice()
                && activity instanceof AudioSharingJoinHandlerActivity
                && !activity.isChangingConfigurations() && !activity.isFinishing()) {
            Log.d(TAG, "onDestroy, finish activity = " + activity.getClass().getName());
            activity.finish();
        }
    }

    private static void logDialogAutoDismiss(AlertDialog dialog) {
        var unused =
                ThreadUtils.postOnBackgroundThread(
+39 −6
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothStatusCodes;
import android.content.Context;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.util.Pair;
import android.view.View;
@@ -140,8 +142,8 @@ public class AudioSharingDisconnectDialogFragmentTest {
    }

    @Test
    @DisableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_flagOff_dialogNotExist() {
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mDeviceItems = new ArrayList<>();
        mDeviceItems.add(TEST_DEVICE_ITEM1);
        mDeviceItems.add(TEST_DEVICE_ITEM2);
@@ -154,8 +156,8 @@ public class AudioSharingDisconnectDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_unattachedFragment_dialogNotExist() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mDeviceItems = new ArrayList<>();
        mDeviceItems.add(TEST_DEVICE_ITEM1);
        mDeviceItems.add(TEST_DEVICE_ITEM2);
@@ -171,8 +173,8 @@ public class AudioSharingDisconnectDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_flagOn_dialogShowBtnForTwoDevices() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mDeviceItems = new ArrayList<>();
        mDeviceItems.add(TEST_DEVICE_ITEM1);
        mDeviceItems.add(TEST_DEVICE_ITEM2);
@@ -189,8 +191,8 @@ public class AudioSharingDisconnectDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_dialogIsShowingForSameGroup_updateDialog() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mDeviceItems = new ArrayList<>();
        mDeviceItems.add(TEST_DEVICE_ITEM1);
        mDeviceItems.add(TEST_DEVICE_ITEM2);
@@ -248,8 +250,8 @@ public class AudioSharingDisconnectDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_dialogIsShowingForNewGroup_showNewDialog() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mDeviceItems = new ArrayList<>();
        mDeviceItems.add(TEST_DEVICE_ITEM1);
        mDeviceItems.add(TEST_DEVICE_ITEM2);
@@ -302,8 +304,9 @@ public class AudioSharingDisconnectDialogFragmentTest {
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING,
            Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE})
    public void onCreateDialog_clickCancel_dialogDismiss() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        mDeviceItems = new ArrayList<>();
        mDeviceItems.add(TEST_DEVICE_ITEM1);
        mDeviceItems.add(TEST_DEVICE_ITEM2);
@@ -319,6 +322,7 @@ public class AudioSharingDisconnectDialogFragmentTest {
        shadowMainLooper().idle();

        assertThat(dialog.isShowing()).isFalse();
        assertThat(mParent.getActivity().isFinishing()).isFalse();
        verify(mFeatureFactory.metricsFeatureProvider, times(0))
                .action(
                        any(Context.class),
@@ -330,4 +334,33 @@ public class AudioSharingDisconnectDialogFragmentTest {
                        eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED),
                        eq(TEST_EVENT_DATA));
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING,
            Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE})
    public void onDestroy_finishAudioSharingJoinHandlerActivity() {
        mDeviceItems = new ArrayList<>();
        mDeviceItems.add(TEST_DEVICE_ITEM1);
        mDeviceItems.add(TEST_DEVICE_ITEM2);
        Fragment parent = new Fragment();
        FragmentController.setupFragment(
                parent, AudioSharingJoinHandlerActivity.class, /* containerViewId= */
                0, /* bundle= */ null);
        AudioSharingDisconnectDialogFragment.show(
                parent, mDeviceItems, mCachedDevice3, EMPTY_EVENT_LISTENER, TEST_EVENT_DATA_LIST);
        shadowMainLooper().idle();

        AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
        assertThat(dialog).isNotNull();
        assertThat(dialog.isShowing()).isTrue();

        View btnView = dialog.findViewById(R.id.negative_btn);
        assertThat(btnView).isNotNull();
        btnView.performClick();
        shadowMainLooper().idle();

        assertThat(dialog.isShowing()).isFalse();
        assertThat(
                parent.getActivity().isFinishing() || parent.getActivity().isDestroyed()).isTrue();
    }
}
+46 −9
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ import android.app.settings.SettingsEnums;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothStatusCodes;
import android.content.Context;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.util.Pair;
import android.view.View;
@@ -142,8 +144,8 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void getMetricsCategory_inSharing_correctValue() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        when(mBroadcast.isEnabled(null)).thenReturn(true);
        int category = mFragment.getMetricsCategory();
        shadowMainLooper().idle();
@@ -151,8 +153,8 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @DisableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_flagOff_dialogNotExist() {
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        AudioSharingJoinDialogFragment.show(
                mParent,
                new ArrayList<>(),
@@ -165,8 +167,8 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_unattachedFragment_dialogNotExist() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        AudioSharingJoinDialogFragment.show(
                new Fragment(),
                new ArrayList<>(),
@@ -179,8 +181,8 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_flagOn_dialogShowTextForSingleDevice() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        when(mBroadcast.isEnabled(null)).thenReturn(true);
        AudioSharingJoinDialogFragment.show(
                mParent,
@@ -201,8 +203,8 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_flagOn_dialogShowTextForTwoDevice() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
        list.add(TEST_DEVICE_ITEM1);
        AudioSharingJoinDialogFragment.show(
@@ -228,8 +230,8 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void onCreateDialog_dialogIsShowing_updateDialog() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
        list.add(TEST_DEVICE_ITEM1);
        AudioSharingJoinDialogFragment.show(
@@ -258,8 +260,9 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING,
            Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE})
    public void onCreateDialog_clickCancel_dialogDismiss() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        AudioSharingJoinDialogFragment.show(
                mParent,
                new ArrayList<>(),
@@ -274,6 +277,7 @@ public class AudioSharingJoinDialogFragmentTest {
        btnView.performClick();
        shadowMainLooper().idle();
        assertThat(dialog.isShowing()).isFalse();
        assertThat(mParent.getActivity().isFinishing()).isFalse();
        verify(mFeatureFactory.metricsFeatureProvider)
                .action(
                        any(Context.class),
@@ -282,8 +286,9 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING,
            Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE})
    public void onCreateDialog_clickBtn_callbackTriggered() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        AtomicBoolean isShareBtnClicked = new AtomicBoolean(false);
        mFragment.show(
                mParent,
@@ -308,6 +313,7 @@ public class AudioSharingJoinDialogFragmentTest {
        shadowMainLooper().idle();
        assertThat(dialog.isShowing()).isFalse();
        assertThat(isShareBtnClicked.get()).isTrue();
        assertThat(mParent.getActivity().isFinishing()).isFalse();
        verify(mFeatureFactory.metricsFeatureProvider)
                .action(
                        any(Context.class),
@@ -316,8 +322,9 @@ public class AudioSharingJoinDialogFragmentTest {
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING,
            Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE})
    public void onCreateDialog_clickCancel_callbackTriggered() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
        AtomicBoolean isCancelBtnClicked = new AtomicBoolean(false);
        mFragment.show(
                mParent,
@@ -342,10 +349,40 @@ public class AudioSharingJoinDialogFragmentTest {
        shadowMainLooper().idle();
        assertThat(dialog.isShowing()).isFalse();
        assertThat(isCancelBtnClicked.get()).isTrue();
        assertThat(mParent.getActivity().isFinishing()).isFalse();
        verify(mFeatureFactory.metricsFeatureProvider)
                .action(
                        any(Context.class),
                        eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED),
                        eq(TEST_EVENT_DATA));
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING,
            Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE})
    public void onDestroy_finishAudioSharingJoinHandlerActivity() {
        Fragment parent = new Fragment();
        FragmentController.setupFragment(
                parent, AudioSharingJoinHandlerActivity.class, /* containerViewId= */
                0, /* bundle= */ null);
        AudioSharingJoinDialogFragment.show(
                parent,
                new ArrayList<>(),
                mCachedDevice2,
                EMPTY_EVENT_LISTENER,
                TEST_EVENT_DATA_LIST);
        shadowMainLooper().idle();

        AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
        assertThat(dialog).isNotNull();

        View btnView = dialog.findViewById(R.id.negative_btn);
        assertThat(btnView).isNotNull();
        btnView.performClick();
        shadowMainLooper().idle();

        assertThat(dialog.isShowing()).isFalse();
        assertThat(
                parent.getActivity().isFinishing() || parent.getActivity().isDestroyed()).isTrue();
    }
}
Loading