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

Commit bd65163f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Revert "[LE] Test cases for Media Output Broadcast Dialog"" into tm-dev am: 7523694a

parents 084a44ba 7523694a
Loading
Loading
Loading
Loading
+3 −12
Original line number Original line Diff line number Diff line
@@ -35,7 +35,6 @@ import android.widget.TextView;


import androidx.core.graphics.drawable.IconCompat;
import androidx.core.graphics.drawable.IconCompat;


import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.qrcode.QrCodeGenerator;
import com.android.settingslib.qrcode.QrCodeGenerator;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastSender;
import com.android.systemui.broadcast.BroadcastSender;
@@ -177,8 +176,7 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog {
        refreshUi();
        refreshUi();
    }
    }


    @VisibleForTesting
    private void refreshUi() {
    void refreshUi() {
        setQrCodeView();
        setQrCodeView();


        mCurrentBroadcastName = getBroadcastMetadataInfo(METADATA_BROADCAST_NAME);
        mCurrentBroadcastName = getBroadcastMetadataInfo(METADATA_BROADCAST_NAME);
@@ -217,8 +215,7 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog {
        mIsPasswordHide = !mIsPasswordHide;
        mIsPasswordHide = !mIsPasswordHide;
    }
    }


    @VisibleForTesting
    private void launchBroadcastUpdatedDialog(boolean isBroadcastCode, String editString) {
    void launchBroadcastUpdatedDialog(boolean isBroadcastCode, String editString) {
        final View layout = LayoutInflater.from(mContext).inflate(
        final View layout = LayoutInflater.from(mContext).inflate(
                R.layout.media_output_broadcast_update_dialog, null);
                R.layout.media_output_broadcast_update_dialog, null);
        final EditText editText = layout.requireViewById(R.id.broadcast_edit_text);
        final EditText editText = layout.requireViewById(R.id.broadcast_edit_text);
@@ -245,8 +242,7 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog {
        return mMediaOutputController.getBroadcastMetadata();
        return mMediaOutputController.getBroadcastMetadata();
    }
    }


    @VisibleForTesting
    private void updateBroadcastInfo(boolean isBroadcastCode, String updatedString) {
    void updateBroadcastInfo(boolean isBroadcastCode, String updatedString) {
        Button positiveBtn = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
        Button positiveBtn = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
        if (positiveBtn != null) {
        if (positiveBtn != null) {
            positiveBtn.setEnabled(false);
            positiveBtn.setEnabled(false);
@@ -349,9 +345,4 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog {
            mBroadcastErrorMessage.setText(R.string.media_output_broadcast_last_update_error);
            mBroadcastErrorMessage.setText(R.string.media_output_broadcast_last_update_error);
        }
        }
    }
    }

    @VisibleForTesting
    int getRetryCount() {
        return mRetryCount;
    }
}
}
+0 −175
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.media.dialog;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.test.filters.SmallTest;

import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastMetadata;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.broadcast.BroadcastSender;
import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.notification.NotificationEntryManager;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class MediaOutputBroadcastDialogTest extends SysuiTestCase {

    private static final String TEST_PACKAGE = "test_package";
    private static final String BROADCAST_NAME_TEST = "Broadcast_name_test";
    private static final String BROADCAST_CODE_TEST = "112233";
    private static final String BROADCAST_CODE_UPDATE_TEST = "11223344";

    // Mock
    private final MediaSessionManager mMediaSessionManager = mock(MediaSessionManager.class);
    private MediaController mMediaController = mock(MediaController.class);
    private PlaybackState mPlaybackState = mock(PlaybackState.class);
    private final LocalBluetoothManager mLocalBluetoothManager = mock(LocalBluetoothManager.class);
    private final LocalBluetoothProfileManager mLocalBluetoothProfileManager = mock(
            LocalBluetoothProfileManager.class);
    private final LocalBluetoothLeBroadcast mLocalBluetoothLeBroadcast = mock(
            LocalBluetoothLeBroadcast.class);
    private final ActivityStarter mStarter = mock(ActivityStarter.class);
    private final BroadcastSender mBroadcastSender = mock(BroadcastSender.class);
    private final LocalMediaManager mLocalMediaManager = mock(LocalMediaManager.class);
    private final MediaDevice mMediaDevice = mock(MediaDevice.class);
    private final NotificationEntryManager mNotificationEntryManager =
            mock(NotificationEntryManager.class);
    private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
    private final NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
            NearbyMediaDevicesManager.class);
    private final LocalBluetoothLeBroadcastMetadata mLocalBluetoothLeBroadcastMetadata =
            mock(LocalBluetoothLeBroadcastMetadata.class);

    private List<MediaController> mMediaControllers = new ArrayList<>();
    private MediaOutputBroadcastDialog mMediaOutputBroadcastDialog;
    private MediaOutputController mMediaOutputController;
    private final List<String> mFeatures = new ArrayList<>();

    @Before
    public void setUp() {
        when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile())
                .thenReturn(mLocalBluetoothLeBroadcast);
        when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState);
        when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_NONE);
        when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE);
        mMediaControllers.add(mMediaController);
        when(mMediaSessionManager.getActiveSessions(any())).thenReturn(mMediaControllers);
        when(mLocalBluetoothLeBroadcast.getLocalBluetoothLeBroadcastMetaData()).thenReturn(
                mLocalBluetoothLeBroadcastMetadata);
        when(mLocalBluetoothLeBroadcastMetadata.convertToQrCodeString())
                .thenReturn("metadata_test_convert");
        when(mLocalBluetoothLeBroadcast.getProgramInfo()).thenReturn(BROADCAST_NAME_TEST);
        when(mLocalBluetoothLeBroadcast.getBroadcastCode())
                .thenReturn(BROADCAST_CODE_TEST.getBytes(StandardCharsets.UTF_8));

        mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
                mMediaSessionManager, mLocalBluetoothManager, mStarter,
                mNotificationEntryManager, mDialogLaunchAnimator,
                Optional.of(mNearbyMediaDevicesManager));
        mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
        mMediaOutputBroadcastDialog = new MediaOutputBroadcastDialog(mContext, false,
                mBroadcastSender, mMediaOutputController);
        mMediaOutputBroadcastDialog.show();

        when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice);
        when(mMediaDevice.getFeatures()).thenReturn(mFeatures);
    }

    @After
    public void tearDown() {
        mMediaOutputBroadcastDialog.dismissDialog();
    }

    @Test
    public void refreshUi_checkBroadcastQrCodeView() {
        mMediaOutputBroadcastDialog.refreshUi();
        final ImageView broadcastQrCodeView = mMediaOutputBroadcastDialog.mDialogView
                .requireViewById(R.id.qrcode_view);

        assertThat(broadcastQrCodeView.getDrawable()).isNotNull();
    }

    @Test
    public void refreshUi_checkBroadcastName() {
        mMediaOutputBroadcastDialog.refreshUi();
        final TextView broadcastName = mMediaOutputBroadcastDialog.mDialogView
                .requireViewById(R.id.broadcast_name_summary);

        assertThat(broadcastName.getText().toString()).isEqualTo(BROADCAST_NAME_TEST);
    }

    @Test
    public void refreshUi_checkBroadcastCode() {
        mMediaOutputBroadcastDialog.refreshUi();
        final TextView broadcastCode = mMediaOutputBroadcastDialog.mDialogView
                .requireViewById(R.id.broadcast_code_summary);

        assertThat(broadcastCode.getText().toString()).isEqualTo(BROADCAST_CODE_TEST);
    }

    @Test
    public void updateBroadcastInfo_stopBroadcastFailed_handleFailedUI() {
        mMediaOutputBroadcastDialog.launchBroadcastUpdatedDialog(true, BROADCAST_CODE_UPDATE_TEST);
        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile())
                .thenReturn(null);

        mMediaOutputBroadcastDialog.updateBroadcastInfo(true, BROADCAST_CODE_UPDATE_TEST);
        assertThat(mMediaOutputBroadcastDialog.getRetryCount()).isEqualTo(1);

        mMediaOutputBroadcastDialog.updateBroadcastInfo(true, BROADCAST_CODE_UPDATE_TEST);
        assertThat(mMediaOutputBroadcastDialog.getRetryCount()).isEqualTo(2);

        // It will be the MAX Retry Count = 3
        mMediaOutputBroadcastDialog.updateBroadcastInfo(true, BROADCAST_CODE_UPDATE_TEST);
        assertThat(mMediaOutputBroadcastDialog.getRetryCount()).isEqualTo(0);
    }

}
+0 −77
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.media.dialog

import android.content.Intent
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest

import com.android.settingslib.media.MediaOutputConstants
import com.android.systemui.SysuiTestCase

import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyString
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations

@SmallTest
@RunWith(AndroidTestingRunner::class)
class MediaOutputDialogReceiverTest : SysuiTestCase() {

    @Mock
    private lateinit var mediaOutputDialogFactory: MediaOutputDialogFactory
    @Mock
    private lateinit var mediaOutputBroadcastDialogFactory: MediaOutputBroadcastDialogFactory

    private lateinit var receiver: MediaOutputDialogReceiver
    private lateinit var intent: Intent

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        receiver = MediaOutputDialogReceiver(
                mediaOutputDialogFactory, mediaOutputBroadcastDialogFactory)
    }

    @Test
    fun onReceive_intentWithPackageName_LaunchBroadcastDialog() {
        intent = Intent(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG).apply {
            putExtra(MediaOutputConstants.EXTRA_PACKAGE_NAME, "test_pkg") }

        receiver.onReceive(mContext, intent)

        verify(mediaOutputBroadcastDialogFactory, times(1)).create(anyString(), anyBoolean(), any())
    }

    @Test
    fun onReceive_intentWithoutPackageName_doNotLaunchBroadcastDialog() {
        intent = Intent(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG).apply {
            putExtra(MediaOutputConstants.EXTRA_PACKAGE_NAME, "") }

        receiver.onReceive(mContext, intent)

        verify(mediaOutputBroadcastDialogFactory, never()).create(anyString(), anyBoolean(), any())
    }
}
 No newline at end of file