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

Commit 2c4b90aa authored by Santiago Seifert's avatar Santiago Seifert Committed by Android (Google) Code Review
Browse files

Merge "Fix "null or empty system routes" crash in SysUI" into main

parents b5e6d328 ac24d089
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -61,6 +61,16 @@ flag {
    bug: "288580225"
}

flag {
    name: "enable_fix_for_empty_system_routes_crash"
    namespace: "media_better_together"
    description: "Fixes a bug causing SystemUI to crash due to an empty system routes list in the routing framework."
    bug: "357468728"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "enable_suggested_device_api"
    is_exported: true
+4 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.os.UserHandle;
import android.util.Slog;

import com.android.internal.R;
import com.android.media.flags.Flags;

import java.util.Collections;
import java.util.List;
@@ -123,7 +124,9 @@ import java.util.Objects;

    @Override
    public synchronized List<MediaRoute2Info> getAvailableRoutes() {
        return Collections.emptyList();
        return Flags.enableFixForEmptySystemRoutesCrash()
                ? List.of(mDeviceRoute)
                : Collections.emptyList();
    }

    @Override
+28 −0
Original line number Diff line number Diff line
@@ -30,12 +30,17 @@ import android.media.AudioRoutesInfo;
import android.media.IAudioRoutesObserver;
import android.media.MediaRoute2Info;
import android.os.RemoteException;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.text.TextUtils;

import com.android.internal.R;
import com.android.media.flags.Flags;
import com.android.server.audio.AudioService;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@@ -48,6 +53,7 @@ import org.mockito.MockitoAnnotations;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;

@RunWith(Enclosed.class)
public class LegacyDeviceRouteControllerTest {
@@ -70,6 +76,11 @@ public class LegacyDeviceRouteControllerTest {

    @RunWith(JUnit4.class)
    public static class DefaultDeviceRouteValueTest {

        @Rule
        public final CheckFlagsRule mCheckFlagsRule =
                DeviceFlagsValueProvider.createCheckFlagsRule();

        @Mock
        private Context mContext;
        @Mock
@@ -136,6 +147,23 @@ public class LegacyDeviceRouteControllerTest {
                    .isTrue();
            assertThat(actualMediaRoute.getVolume()).isEqualTo(VOLUME_DEFAULT_VALUE);
        }

        @RequiresFlagsEnabled(Flags.FLAG_ENABLE_FIX_FOR_EMPTY_SYSTEM_ROUTES_CRASH)
        @Test
        public void getAvailableRoutes_matchesSelectedRoute() {
            when(mResources.getText(R.string.default_audio_route_name))
                    .thenReturn(DEFAULT_ROUTE_NAME);

            when(mAudioService.startWatchingRoutes(any())).thenReturn(null);

            LegacyDeviceRouteController deviceRouteController =
                    new LegacyDeviceRouteController(
                            mContext, mAudioManager, mAudioService, mOnDeviceRouteChangedListener);

            MediaRoute2Info selectedRoute = deviceRouteController.getSelectedRoute();
            assertThat(deviceRouteController.getAvailableRoutes())
                    .isEqualTo(List.of(selectedRoute));
        }
    }

    @RunWith(Parameterized.class)