From c914ace6f53be2650617b5a86f32621998cedd95 Mon Sep 17 00:00:00 2001 From: Caitlin Cassidy Date: Fri, 20 Aug 2021 15:18:42 +0000 Subject: [PATCH] [Dagger] Remove Dependency.get from VolumeDialogImpl. The original change was reverted because it was breaking the build, but that was because automerger split the topic so not all CLs were in the build (see go/automerger-questions#did-automerger-split-a-topic). I'm now submitting the same changes on master and sc-v2-dev to avoid automerger issues. Test: atest and manual Bug: 138786270 Change-Id: I42665b800fb2016db9e33dcfa85c3661d9ccf605 --- .../dagger/SystemUIDefaultModule.java | 4 +- .../systemui/dagger/SystemUIModule.java | 2 - .../android/systemui/tv/TvSystemUIModule.java | 4 +- .../volume/VolumeDialogComponent.java | 14 ++----- .../systemui/volume/VolumeDialogImpl.java | 32 ++++++++++----- .../systemui/volume/dagger/VolumeModule.java | 36 ++++++++++++++++ .../systemui/volume/VolumeDialogImplTest.java | 41 +++++++++++++------ 7 files changed, 95 insertions(+), 38 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java index 9cb9a362d460d..0923caaf0d761 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIDefaultModule.java @@ -68,6 +68,7 @@ import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerImpl; import com.android.systemui.statusbar.policy.SensorPrivacyController; import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl; +import com.android.systemui.volume.dagger.VolumeModule; import javax.inject.Named; @@ -82,7 +83,8 @@ import dagger.Provides; @Module(includes = { MediaModule.class, PowerModule.class, - QSModule.class + QSModule.class, + VolumeModule.class }) public abstract class SystemUIDefaultModule { diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index 3d90eded20cba..7450eb6d2b8af 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -76,7 +76,6 @@ import com.android.systemui.util.sensors.SensorModule; import com.android.systemui.util.settings.SettingsUtilModule; import com.android.systemui.util.time.SystemClock; import com.android.systemui.util.time.SystemClockImpl; -import com.android.systemui.volume.dagger.VolumeModule; import com.android.systemui.wallet.dagger.WalletModule; import com.android.systemui.wmshell.BubblesManager; import com.android.wm.shell.bubbles.Bubbles; @@ -114,7 +113,6 @@ import dagger.Provides; TunerModule.class, UserModule.class, UtilModule.class, - VolumeModule.class, WalletModule.class }, subcomponents = { diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java index 35251002fb7bf..8912448232719 100644 --- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java @@ -70,6 +70,7 @@ import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerIm import com.android.systemui.statusbar.policy.SensorPrivacyController; import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl; import com.android.systemui.statusbar.tv.notifications.TvNotificationHandler; +import com.android.systemui.volume.dagger.VolumeModule; import javax.inject.Named; @@ -83,7 +84,8 @@ import dagger.Provides; */ @Module(includes = { PowerModule.class, - QSModule.class + QSModule.class, + VolumeModule.class, }, subcomponents = { }) diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index f2e031cfa1dff..c083c14a3730e 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -20,7 +20,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; -import android.media.AudioManager; import android.media.VolumePolicy; import android.os.Bundle; import android.view.WindowManager.LayoutParams; @@ -84,7 +83,8 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna DemoModeController demoModeController, PluginDependencyProvider pluginDependencyProvider, ExtensionController extensionController, - TunerService tunerService) { + TunerService tunerService, + VolumeDialog volumeDialog) { mContext = context; mKeyguardViewMediator = keyguardViewMediator; mActivityStarter = activityStarter; @@ -94,7 +94,7 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna pluginDependencyProvider.allowPluginDependency(VolumeDialogController.class); extensionController.newExtension(VolumeDialog.class) .withPlugin(VolumeDialog.class) - .withDefault(this::createDefault) + .withDefault(() -> volumeDialog) .withCallback(dialog -> { if (mDialog != null) { mDialog.destroy(); @@ -108,14 +108,6 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna demoModeController.addCallback(this); } - protected VolumeDialog createDefault() { - VolumeDialogImpl impl = new VolumeDialogImpl(mContext); - impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false); - impl.setAutomute(true); - impl.setSilentMode(false); - return impl; - } - @Override public void onTuningChanged(String key, String newValue) { boolean volumeDownToEnterSilent = mVolumePolicy.volumeDownToEnterSilent; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index dbf115b62a582..58f74a0d2a02c 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -106,7 +106,6 @@ import androidx.annotation.Nullable; import com.android.internal.graphics.drawable.BackgroundBlurDrawable; import com.android.internal.view.RotationPolicy; import com.android.settingslib.Utils; -import com.android.systemui.Dependency; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; @@ -235,6 +234,10 @@ public class VolumeDialogImpl implements VolumeDialog, private final Object mSafetyWarningLock = new Object(); private final Accessibility mAccessibility = new Accessibility(); + private final ConfigurationController mConfigurationController; + private final MediaOutputDialogFactory mMediaOutputDialogFactory; + private final ActivityStarter mActivityStarter; + private boolean mShowing; private boolean mShowA11yStream; @@ -256,14 +259,24 @@ public class VolumeDialogImpl implements VolumeDialog, private Consumer mCrossWindowBlurEnabledListener; private BackgroundBlurDrawable mDialogRowsViewBackground; - public VolumeDialogImpl(Context context) { + public VolumeDialogImpl( + Context context, + VolumeDialogController volumeDialogController, + AccessibilityManagerWrapper accessibilityManagerWrapper, + DeviceProvisionedController deviceProvisionedController, + ConfigurationController configurationController, + MediaOutputDialogFactory mediaOutputDialogFactory, + ActivityStarter activityStarter) { mContext = new ContextThemeWrapper(context, R.style.volume_dialog_theme); - mController = Dependency.get(VolumeDialogController.class); + mController = volumeDialogController; mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); - mAccessibilityMgr = Dependency.get(AccessibilityManagerWrapper.class); - mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class); + mAccessibilityMgr = accessibilityManagerWrapper; + mDeviceProvisionedController = deviceProvisionedController; + mConfigurationController = configurationController; + mMediaOutputDialogFactory = mediaOutputDialogFactory; + mActivityStarter = activityStarter; mShowActiveStreamOnly = showActiveStreamOnly(); mHasSeenODICaptionsTooltip = Prefs.getBoolean(context, Prefs.Key.HAS_SEEN_ODI_CAPTIONS_TOOLTIP, false); @@ -306,14 +319,14 @@ public class VolumeDialogImpl implements VolumeDialog, mController.addCallback(mControllerCallbackH, mHandler); mController.getState(); - Dependency.get(ConfigurationController.class).addCallback(this); + mConfigurationController.addCallback(this); } @Override public void destroy() { mController.removeCallback(mControllerCallbackH); mHandler.removeCallbacksAndMessages(null); - Dependency.get(ConfigurationController.class).removeCallback(this); + mConfigurationController.removeCallback(this); } @Override @@ -1017,9 +1030,8 @@ public class VolumeDialogImpl implements VolumeDialog, Events.writeEvent(Events.EVENT_SETTINGS_CLICK); Intent intent = new Intent(Settings.Panel.ACTION_VOLUME); dismissH(DISMISS_REASON_SETTINGS_CLICKED); - Dependency.get(MediaOutputDialogFactory.class).dismiss(); - Dependency.get(ActivityStarter.class).startActivity(intent, - true /* dismissShade */); + mMediaOutputDialogFactory.dismiss(); + mActivityStarter.startActivity(intent, true /* dismissShade */); }); } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java index 1ef4c169b786f..79aa643fc6c2e 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java +++ b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java @@ -16,11 +16,23 @@ package com.android.systemui.volume.dagger; +import android.content.Context; +import android.media.AudioManager; + +import com.android.systemui.media.dialog.MediaOutputDialogFactory; +import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.plugins.VolumeDialog; +import com.android.systemui.plugins.VolumeDialogController; +import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; +import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.volume.VolumeComponent; import com.android.systemui.volume.VolumeDialogComponent; +import com.android.systemui.volume.VolumeDialogImpl; import dagger.Binds; import dagger.Module; +import dagger.Provides; /** Dagger Module for code in the volume package. */ @@ -29,4 +41,28 @@ public interface VolumeModule { /** */ @Binds VolumeComponent provideVolumeComponent(VolumeDialogComponent volumeDialogComponent); + + /** */ + @Provides + static VolumeDialog provideVolumeDialog( + Context context, + VolumeDialogController volumeDialogController, + AccessibilityManagerWrapper accessibilityManagerWrapper, + DeviceProvisionedController deviceProvisionedController, + ConfigurationController configurationController, + MediaOutputDialogFactory mediaOutputDialogFactory, + ActivityStarter activityStarter) { + VolumeDialogImpl impl = new VolumeDialogImpl( + context, + volumeDialogController, + accessibilityManagerWrapper, + deviceProvisionedController, + configurationController, + mediaOutputDialogFactory, + activityStarter); + impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false); + impl.setAutomute(true); + impl.setSilentMode(false); + return impl; + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java index dd4830e893af7..949345662e791 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java @@ -41,9 +41,13 @@ import androidx.test.filters.SmallTest; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; +import com.android.systemui.media.dialog.MediaOutputDialogFactory; +import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.VolumeDialogController; import com.android.systemui.plugins.VolumeDialogController.State; import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; +import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.DeviceProvisionedController; import org.junit.Before; import org.junit.Test; @@ -68,23 +72,34 @@ public class VolumeDialogImplTest extends SysuiTestCase { View mDrawerNormal; @Mock - VolumeDialogController mController; - + VolumeDialogController mVolumeDialogController; @Mock KeyguardManager mKeyguard; - @Mock AccessibilityManagerWrapper mAccessibilityMgr; + @Mock + DeviceProvisionedController mDeviceProvisionedController; + @Mock + ConfigurationController mConfigurationController; + @Mock + MediaOutputDialogFactory mMediaOutputDialogFactory; + @Mock + ActivityStarter mActivityStarter; @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); - mController = mDependency.injectMockDependency(VolumeDialogController.class); - mAccessibilityMgr = mDependency.injectMockDependency(AccessibilityManagerWrapper.class); getContext().addMockSystemService(KeyguardManager.class, mKeyguard); - mDialog = new VolumeDialogImpl(getContext()); + mDialog = new VolumeDialogImpl( + getContext(), + mVolumeDialogController, + mAccessibilityMgr, + mDeviceProvisionedController, + mConfigurationController, + mMediaOutputDialogFactory, + mActivityStarter); mDialog.init(0, null); State state = createShellState(); mDialog.onStateChangedH(state); @@ -170,7 +185,7 @@ public class VolumeDialogImplTest extends SysuiTestCase { Mockito.reset(mAccessibilityMgr); ArgumentCaptor controllerCallbackCapture = ArgumentCaptor.forClass(VolumeDialogController.Callbacks.class); - verify(mController).addCallback(controllerCallbackCapture.capture(), any()); + verify(mVolumeDialogController).addCallback(controllerCallbackCapture.capture(), any()); VolumeDialogController.Callbacks callbacks = controllerCallbackCapture.getValue(); callbacks.onShowSafetyWarning(AudioManager.FLAG_SHOW_UI); verify(mAccessibilityMgr).getRecommendedTimeoutMillis( @@ -201,13 +216,13 @@ public class VolumeDialogImplTest extends SysuiTestCase { mDialog.onStateChangedH(initialSilentState); // expected: shouldn't call vibrate yet - verify(mController, never()).vibrate(any()); + verify(mVolumeDialogController, never()).vibrate(any()); // changed ringer to vibrate mDialog.onStateChangedH(vibrateState); // expected: vibrate device - verify(mController).vibrate(any()); + verify(mVolumeDialogController).vibrate(any()); } @Test @@ -225,7 +240,7 @@ public class VolumeDialogImplTest extends SysuiTestCase { mDialog.onStateChangedH(vibrateState); // shouldn't call vibrate - verify(mController, never()).vibrate(any()); + verify(mVolumeDialogController, never()).vibrate(any()); } @Test @@ -238,7 +253,7 @@ public class VolumeDialogImplTest extends SysuiTestCase { mDrawerVibrate.performClick(); // Make sure we've actually changed the ringer mode. - verify(mController, times(1)).setRingerMode( + verify(mVolumeDialogController, times(1)).setRingerMode( AudioManager.RINGER_MODE_VIBRATE, false); } @@ -252,7 +267,7 @@ public class VolumeDialogImplTest extends SysuiTestCase { mDrawerMute.performClick(); // Make sure we've actually changed the ringer mode. - verify(mController, times(1)).setRingerMode( + verify(mVolumeDialogController, times(1)).setRingerMode( AudioManager.RINGER_MODE_SILENT, false); } @@ -266,7 +281,7 @@ public class VolumeDialogImplTest extends SysuiTestCase { mDrawerNormal.performClick(); // Make sure we've actually changed the ringer mode. - verify(mController, times(1)).setRingerMode( + verify(mVolumeDialogController, times(1)).setRingerMode( AudioManager.RINGER_MODE_NORMAL, false); }