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

Commit d9b9126b authored by shaoweishen's avatar shaoweishen Committed by Automerger Merge Worker
Browse files

DO NOT MERGE: Downbranch merge conflict[Output Switcher] Add support for...

DO NOT MERGE: Downbranch merge conflict[Output Switcher] Add support for device disabled reason am: 63e26b3c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20895033



Change-Id: I99d44bb2d01b1b1910bf28a97915df8e21f936d6
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 937904fd 63e26b3c
Loading
Loading
Loading
Loading
+18 −0
Original line number Original line Diff line number Diff line
@@ -184,6 +184,24 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     */
     */
    public abstract String getId();
    public abstract String getId();


    /**
     * Get disabled reason of device
     *
     * @return disabled reason of device
     */
    public int getDisableReason() {
        return -1;
    }

    /**
     * Checks if device is has disabled reason
     *
     * @return true if device has disabled reason
     */
    public boolean hasDisabledReason() {
        return false;
    }

    /**
    /**
     * Checks if device is suggested device from application
     * Checks if device is suggested device from application
     *
     *
+2 −0
Original line number Original line Diff line number Diff line
@@ -2428,6 +2428,8 @@
    <string name="media_output_group_title_speakers_and_displays">Speakers &amp; Displays</string>
    <string name="media_output_group_title_speakers_and_displays">Speakers &amp; Displays</string>
    <!-- Title for Suggested Devices group. [CHAR LIMIT=NONE] -->
    <!-- Title for Suggested Devices group. [CHAR LIMIT=NONE] -->
    <string name="media_output_group_title_suggested_device">Suggested Devices</string>
    <string name="media_output_group_title_suggested_device">Suggested Devices</string>
    <!-- Sub status indicates device need premium account. [CHAR LIMIT=NONE] -->
    <string name="media_output_status_require_premium">Requires premium account</string>


    <!-- Media Output Broadcast Dialog -->
    <!-- Media Output Broadcast Dialog -->
    <!-- Title for Broadcast First Notify Dialog [CHAR LIMIT=60] -->
    <!-- Title for Broadcast First Notify Dialog [CHAR LIMIT=60] -->
+23 −0
Original line number Original line Diff line number Diff line
@@ -16,17 +16,21 @@


package com.android.systemui.media.dialog;
package com.android.systemui.media.dialog;


import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.ColorStateList;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.Log;
import android.util.Log;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.TextView;


import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.core.widget.CompoundButtonCompat;
import androidx.core.widget.CompoundButtonCompat;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView;


@@ -186,6 +190,17 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
                    mCurrentActivePosition = position;
                    mCurrentActivePosition = position;
                    updateFullItemClickListener(v -> onItemClick(v, device));
                    updateFullItemClickListener(v -> onItemClick(v, device));
                    setSingleLineLayout(getItemTitle(device));
                    setSingleLineLayout(getItemTitle(device));
                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
                        && mController.isSubStatusSupported() && device.hasDisabledReason()) {
                    //update to subtext with device status
                    setUpDeviceIcon(device);
                    mSubTitleText.setText(
                            Api34Impl.composeDisabledReason(device.getDisableReason(), mContext));
                    updateConnectionFailedStatusIcon();
                    updateFullItemClickListener(null);
                    setTwoLineLayout(device, false /* bFocused */, false /* showSeekBar */,
                            false /* showProgressBar */, true /* showSubtitle */,
                            true /* showStatus */);
                } else if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
                } else if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
                    setUpDeviceIcon(device);
                    setUpDeviceIcon(device);
                    updateConnectionFailedStatusIcon();
                    updateConnectionFailedStatusIcon();
@@ -389,4 +404,12 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
            mTitleText.setText(groupDividerTitle);
            mTitleText.setText(groupDividerTitle);
        }
        }
    }
    }

    @RequiresApi(34)
    private static class Api34Impl {
        @DoNotInline
        static String composeDisabledReason(int reason, Context context) {
            return "";
        }
    }
}
}
+4 −0
Original line number Original line Diff line number Diff line
@@ -757,6 +757,10 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
        return mFeatureFlags.isEnabled(Flags.OUTPUT_SWITCHER_ROUTES_PROCESSING);
        return mFeatureFlags.isEnabled(Flags.OUTPUT_SWITCHER_ROUTES_PROCESSING);
    }
    }


    public boolean isSubStatusSupported() {
        return mFeatureFlags.isEnabled(Flags.OUTPUT_SWITCHER_DEVICE_STATUS);
    }

    List<MediaDevice> getGroupMediaDevices() {
    List<MediaDevice> getGroupMediaDevices() {
        final List<MediaDevice> selectedDevices = getSelectedMediaDevice();
        final List<MediaDevice> selectedDevices = getSelectedMediaDevice();
        final List<MediaDevice> selectableDevices = getSelectableMediaDevice();
        final List<MediaDevice> selectableDevices = getSelectableMediaDevice();
+20 −0
Original line number Original line Diff line number Diff line
@@ -57,6 +57,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
    private static final String TEST_DEVICE_ID_1 = "test_device_id_1";
    private static final String TEST_DEVICE_ID_1 = "test_device_id_1";
    private static final String TEST_DEVICE_ID_2 = "test_device_id_2";
    private static final String TEST_DEVICE_ID_2 = "test_device_id_2";
    private static final String TEST_SESSION_NAME = "test_session_name";
    private static final String TEST_SESSION_NAME = "test_session_name";

    private static final int TEST_MAX_VOLUME = 20;
    private static final int TEST_MAX_VOLUME = 20;
    private static final int TEST_CURRENT_VOLUME = 10;
    private static final int TEST_CURRENT_VOLUME = 10;


@@ -78,6 +79,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
    @Before
    @Before
    public void setUp() {
    public void setUp() {
        when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(false);
        when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(false);
        when(mMediaOutputController.isSubStatusSupported()).thenReturn(false);
        when(mMediaOutputController.getMediaItemList()).thenReturn(mMediaItems);
        when(mMediaOutputController.getMediaItemList()).thenReturn(mMediaItems);
        when(mMediaOutputController.getMediaDevices()).thenReturn(mMediaDevices);
        when(mMediaOutputController.getMediaDevices()).thenReturn(mMediaDevices);
        when(mMediaOutputController.hasAdjustVolumeUserRestriction()).thenReturn(false);
        when(mMediaOutputController.hasAdjustVolumeUserRestriction()).thenReturn(false);
@@ -403,6 +405,24 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
        assertThat(mViewHolder.mTwoLineTitleText.getText()).isEqualTo(TEST_DEVICE_NAME_2);
        assertThat(mViewHolder.mTwoLineTitleText.getText()).isEqualTo(TEST_DEVICE_NAME_2);
    }
    }


    @Test
    public void subStatusSupported_onBindViewHolder_bindFailedStateDevice_verifyView() {
        String deviceStatus = "";
        when(mMediaOutputController.isSubStatusSupported()).thenReturn(true);
        when(mMediaDevice2.hasDisabledReason()).thenReturn(true);
        when(mMediaDevice2.getDisableReason()).thenReturn(-1);
        mMediaOutputAdapter.onBindViewHolder(mViewHolder, 1);

        assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.GONE);
        assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.GONE);
        assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
        assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE);
        assertThat(mViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mTwoLineTitleText.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mSubTitleText.getText()).isEqualTo(deviceStatus);
        assertThat(mViewHolder.mTwoLineTitleText.getText()).isEqualTo(TEST_DEVICE_NAME_2);
    }

    @Test
    @Test
    public void onBindViewHolder_inTransferring_bindTransferringDevice_verifyView() {
    public void onBindViewHolder_inTransferring_bindTransferringDevice_verifyView() {
        when(mMediaOutputController.isAnyDeviceTransferring()).thenReturn(true);
        when(mMediaOutputController.isAnyDeviceTransferring()).thenReturn(true);