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

Commit 175505e5 authored by Narayan Kamath's avatar Narayan Kamath Committed by Android (Google) Code Review
Browse files

Merge "AutoTileManager: Auto add cast tile when the device is casting."

parents 9fbb8235 fa0ec0ca
Loading
Loading
Loading
Loading
+34 −1
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import com.android.systemui.Dependency;
import com.android.systemui.qs.AutoAddTracker;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastController.CastDevice;
import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.DataSaverController.Listener;
import com.android.systemui.statusbar.policy.HotspotController;
@@ -42,6 +44,7 @@ public class AutoTileManager {
    public static final String INVERSION = "inversion";
    public static final String WORK = "work";
    public static final String NIGHT = "night";
    public static final String CAST = "cast";

    private final Context mContext;
    private final QSTileHost mHost;
@@ -51,6 +54,7 @@ public class AutoTileManager {
    private final DataSaverController mDataSaverController;
    private final ManagedProfileController mManagedProfileController;
    private final NightDisplayListener mNightDisplayListener;
    private final CastController mCastController;

    @Inject
    public AutoTileManager(Context context, AutoAddTracker autoAddTracker, QSTileHost host,
@@ -58,7 +62,8 @@ public class AutoTileManager {
            HotspotController hotspotController,
            DataSaverController dataSaverController,
            ManagedProfileController managedProfileController,
            NightDisplayListener nightDisplayListener) {
            NightDisplayListener nightDisplayListener,
            CastController castController) {
        mAutoTracker = autoAddTracker;
        mContext = context;
        mHost = host;
@@ -67,6 +72,7 @@ public class AutoTileManager {
        mDataSaverController = dataSaverController;
        mManagedProfileController = managedProfileController;
        mNightDisplayListener = nightDisplayListener;
        mCastController = castController;
        if (!mAutoTracker.isAdded(HOTSPOT)) {
            hotspotController.addCallback(mHotspotCallback);
        }
@@ -95,6 +101,9 @@ public class AutoTileManager {
                && ColorDisplayManager.isNightDisplayAvailable(mContext)) {
            nightDisplayListener.setCallback(mNightDisplayCallback);
        }
        if (!mAutoTracker.isAdded(CAST)) {
            castController.addCallback(mCastCallback);
        }
    }

    public void destroy() {
@@ -108,6 +117,7 @@ public class AutoTileManager {
        if (ColorDisplayManager.isNightDisplayAvailable(mContext)) {
            mNightDisplayListener.setCallback(null);
        }
        mCastController.removeCallback(mCastCallback);
    }

    public void unmarkTileAsAutoAdded(String tabSpec) {
@@ -181,4 +191,27 @@ public class AutoTileManager {
            mHandler.post(() -> mNightDisplayListener.setCallback(null));
        }
    };

    @VisibleForTesting
    final CastController.Callback mCastCallback = new CastController.Callback() {
        @Override
        public void onCastDevicesChanged() {
            if (mAutoTracker.isAdded(CAST)) return;

            boolean isCasting = false;
            for (CastDevice device : mCastController.getCastDevices()) {
                if (device.state == CastDevice.STATE_CONNECTED
                        || device.state == CastDevice.STATE_CONNECTING) {
                    isCasting = true;
                    break;
                }
            }

            if (isCasting) {
                mHost.addTile(CAST);
                mAutoTracker.setTileAdded(CAST);
                mHandler.post(() -> mCastController.removeCallback(mCastCallback));
            }
        }
    };
}
+29 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.phone;

import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -31,6 +32,8 @@ import android.testing.TestableLooper.RunWithLooper;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.qs.AutoAddTracker;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastController.CastDevice;
import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.HotspotController;

@@ -40,6 +43,9 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.Collections;
import java.util.Set;

@RunWith(AndroidTestingRunner.class)
@RunWithLooper
@SmallTest
@@ -47,6 +53,7 @@ public class AutoTileManagerTest extends SysuiTestCase {

    @Mock private QSTileHost mQsTileHost;
    @Mock private AutoAddTracker mAutoAddTracker;
    @Mock private CastController mCastController;

    private AutoTileManager mAutoTileManager;

@@ -58,7 +65,8 @@ public class AutoTileManagerTest extends SysuiTestCase {
                mock(HotspotController.class),
                mock(DataSaverController.class),
                mock(ManagedProfileController.class),
                mock(NightDisplayListener.class));
                mock(NightDisplayListener.class),
                mCastController);
    }

    @Test
@@ -108,4 +116,24 @@ public class AutoTileManagerTest extends SysuiTestCase {
                ColorDisplayManager.AUTO_MODE_DISABLED);
        verify(mQsTileHost, never()).addTile("night");
    }

    private static Set<CastDevice> buildFakeCastDevice(boolean isCasting) {
        CastDevice cd = new CastDevice();
        cd.state = isCasting ? CastDevice.STATE_CONNECTED : CastDevice.STATE_DISCONNECTED;
        return Collections.singleton(cd);
    }

    @Test
    public void castTileAdded_whenDeviceIsCasting() {
        doReturn(buildFakeCastDevice(true)).when(mCastController).getCastDevices();
        mAutoTileManager.mCastCallback.onCastDevicesChanged();
        verify(mQsTileHost).addTile("cast");
    }

    @Test
    public void castTileNotAdded_whenDeviceIsNotCasting() {
        doReturn(buildFakeCastDevice(false)).when(mCastController).getCastDevices();
        mAutoTileManager.mCastCallback.onCastDevicesChanged();
        verify(mQsTileHost, never()).addTile("cast");
    }
}