diff --git a/src/com/android/settings/panel/PanelFeatureProviderImpl.java b/src/com/android/settings/panel/PanelFeatureProviderImpl.java index a73881b4cc1..57a1ab0324a 100644 --- a/src/com/android/settings/panel/PanelFeatureProviderImpl.java +++ b/src/com/android/settings/panel/PanelFeatureProviderImpl.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.provider.Settings; +import android.util.FeatureFlagUtils; public class PanelFeatureProviderImpl implements PanelFeatureProvider { @@ -49,9 +50,19 @@ public class PanelFeatureProviderImpl implements PanelFeatureProvider { case Settings.Panel.ACTION_WIFI: return WifiPanel.create(context); case Settings.Panel.ACTION_VOLUME: - return VolumePanel.create(context); + if (FeatureFlagUtils.isEnabled(context, + FeatureFlagUtils.SETTINGS_VOLUME_PANEL_IN_SYSTEMUI)) { + // Redirect to the volume panel in SystemUI. + Intent volumeIntent = new Intent(Settings.Panel.ACTION_VOLUME); + volumeIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND).setPackage( + SYSTEMUI_PACKAGE_NAME); + context.sendBroadcast(volumeIntent); + return null; + } else { + return VolumePanel.create(context); + } } - throw new IllegalStateException("No matching panel for: " + panelType); + throw new IllegalStateException("No matching panel for: " + panelType); } } diff --git a/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java b/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java index a02c054237f..4b08ef8bfa8 100644 --- a/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java +++ b/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java @@ -28,6 +28,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.provider.Settings; +import android.util.FeatureFlagUtils; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -35,6 +36,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; @RunWith(AndroidJUnit4.class) public class PanelFeatureProviderImplTest { @@ -66,11 +68,27 @@ public class PanelFeatureProviderImplTest { } @Test - public void getPanel_volume_returnsCorrectPanel() { + public void getPanel_volumePanel_returnsCorrectPanel() { + FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_VOLUME_PANEL_IN_SYSTEMUI, + false); mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, Settings.Panel.ACTION_VOLUME); final PanelContent panel = mProvider.getPanel(mContext, mBundle); assertThat(panel).isInstanceOf(VolumePanel.class); } + + @Test + public void getPanel_volumePanelFlagEnabled_sendRedirectIntent() { + FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_VOLUME_PANEL_IN_SYSTEMUI, + true); + mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, Settings.Panel.ACTION_VOLUME); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + + mProvider.getPanel(mContext, mBundle); + + verify(mContext).sendBroadcast(intentCaptor.capture()); + assertThat(intentCaptor.getValue().getAction()).isEqualTo(Settings.Panel.ACTION_VOLUME); + assertThat(intentCaptor.getValue().getPackage()).isEqualTo(SYSTEMUI_PACKAGE_NAME); + } }