[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
This commit is contained in:
Caitlin Cassidy
2021-08-20 15:18:42 +00:00
parent f8c928be0e
commit c914ace6f5
7 changed files with 95 additions and 38 deletions

View File

@@ -68,6 +68,7 @@ import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerImpl; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerImpl;
import com.android.systemui.statusbar.policy.SensorPrivacyController; import com.android.systemui.statusbar.policy.SensorPrivacyController;
import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl; import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
import com.android.systemui.volume.dagger.VolumeModule;
import javax.inject.Named; import javax.inject.Named;
@@ -82,7 +83,8 @@ import dagger.Provides;
@Module(includes = { @Module(includes = {
MediaModule.class, MediaModule.class,
PowerModule.class, PowerModule.class,
QSModule.class QSModule.class,
VolumeModule.class
}) })
public abstract class SystemUIDefaultModule { public abstract class SystemUIDefaultModule {

View File

@@ -76,7 +76,6 @@ import com.android.systemui.util.sensors.SensorModule;
import com.android.systemui.util.settings.SettingsUtilModule; import com.android.systemui.util.settings.SettingsUtilModule;
import com.android.systemui.util.time.SystemClock; import com.android.systemui.util.time.SystemClock;
import com.android.systemui.util.time.SystemClockImpl; 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.wallet.dagger.WalletModule;
import com.android.systemui.wmshell.BubblesManager; import com.android.systemui.wmshell.BubblesManager;
import com.android.wm.shell.bubbles.Bubbles; import com.android.wm.shell.bubbles.Bubbles;
@@ -114,7 +113,6 @@ import dagger.Provides;
TunerModule.class, TunerModule.class,
UserModule.class, UserModule.class,
UtilModule.class, UtilModule.class,
VolumeModule.class,
WalletModule.class WalletModule.class
}, },
subcomponents = { subcomponents = {

View File

@@ -70,6 +70,7 @@ import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerIm
import com.android.systemui.statusbar.policy.SensorPrivacyController; import com.android.systemui.statusbar.policy.SensorPrivacyController;
import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl; import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
import com.android.systemui.statusbar.tv.notifications.TvNotificationHandler; import com.android.systemui.statusbar.tv.notifications.TvNotificationHandler;
import com.android.systemui.volume.dagger.VolumeModule;
import javax.inject.Named; import javax.inject.Named;
@@ -83,7 +84,8 @@ import dagger.Provides;
*/ */
@Module(includes = { @Module(includes = {
PowerModule.class, PowerModule.class,
QSModule.class QSModule.class,
VolumeModule.class,
}, },
subcomponents = { subcomponents = {
}) })

View File

@@ -20,7 +20,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.media.AudioManager;
import android.media.VolumePolicy; import android.media.VolumePolicy;
import android.os.Bundle; import android.os.Bundle;
import android.view.WindowManager.LayoutParams; import android.view.WindowManager.LayoutParams;
@@ -84,7 +83,8 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna
DemoModeController demoModeController, DemoModeController demoModeController,
PluginDependencyProvider pluginDependencyProvider, PluginDependencyProvider pluginDependencyProvider,
ExtensionController extensionController, ExtensionController extensionController,
TunerService tunerService) { TunerService tunerService,
VolumeDialog volumeDialog) {
mContext = context; mContext = context;
mKeyguardViewMediator = keyguardViewMediator; mKeyguardViewMediator = keyguardViewMediator;
mActivityStarter = activityStarter; mActivityStarter = activityStarter;
@@ -94,7 +94,7 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna
pluginDependencyProvider.allowPluginDependency(VolumeDialogController.class); pluginDependencyProvider.allowPluginDependency(VolumeDialogController.class);
extensionController.newExtension(VolumeDialog.class) extensionController.newExtension(VolumeDialog.class)
.withPlugin(VolumeDialog.class) .withPlugin(VolumeDialog.class)
.withDefault(this::createDefault) .withDefault(() -> volumeDialog)
.withCallback(dialog -> { .withCallback(dialog -> {
if (mDialog != null) { if (mDialog != null) {
mDialog.destroy(); mDialog.destroy();
@@ -108,14 +108,6 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna
demoModeController.addCallback(this); 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 @Override
public void onTuningChanged(String key, String newValue) { public void onTuningChanged(String key, String newValue) {
boolean volumeDownToEnterSilent = mVolumePolicy.volumeDownToEnterSilent; boolean volumeDownToEnterSilent = mVolumePolicy.volumeDownToEnterSilent;

View File

@@ -106,7 +106,6 @@ import androidx.annotation.Nullable;
import com.android.internal.graphics.drawable.BackgroundBlurDrawable; import com.android.internal.graphics.drawable.BackgroundBlurDrawable;
import com.android.internal.view.RotationPolicy; import com.android.internal.view.RotationPolicy;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Prefs; import com.android.systemui.Prefs;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.animation.Interpolators; import com.android.systemui.animation.Interpolators;
@@ -235,6 +234,10 @@ public class VolumeDialogImpl implements VolumeDialog,
private final Object mSafetyWarningLock = new Object(); private final Object mSafetyWarningLock = new Object();
private final Accessibility mAccessibility = new Accessibility(); private final Accessibility mAccessibility = new Accessibility();
private final ConfigurationController mConfigurationController;
private final MediaOutputDialogFactory mMediaOutputDialogFactory;
private final ActivityStarter mActivityStarter;
private boolean mShowing; private boolean mShowing;
private boolean mShowA11yStream; private boolean mShowA11yStream;
@@ -256,14 +259,24 @@ public class VolumeDialogImpl implements VolumeDialog,
private Consumer<Boolean> mCrossWindowBlurEnabledListener; private Consumer<Boolean> mCrossWindowBlurEnabledListener;
private BackgroundBlurDrawable mDialogRowsViewBackground; private BackgroundBlurDrawable mDialogRowsViewBackground;
public VolumeDialogImpl(Context context) { public VolumeDialogImpl(
Context context,
VolumeDialogController volumeDialogController,
AccessibilityManagerWrapper accessibilityManagerWrapper,
DeviceProvisionedController deviceProvisionedController,
ConfigurationController configurationController,
MediaOutputDialogFactory mediaOutputDialogFactory,
ActivityStarter activityStarter) {
mContext = mContext =
new ContextThemeWrapper(context, R.style.volume_dialog_theme); new ContextThemeWrapper(context, R.style.volume_dialog_theme);
mController = Dependency.get(VolumeDialogController.class); mController = volumeDialogController;
mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
mAccessibilityMgr = Dependency.get(AccessibilityManagerWrapper.class); mAccessibilityMgr = accessibilityManagerWrapper;
mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class); mDeviceProvisionedController = deviceProvisionedController;
mConfigurationController = configurationController;
mMediaOutputDialogFactory = mediaOutputDialogFactory;
mActivityStarter = activityStarter;
mShowActiveStreamOnly = showActiveStreamOnly(); mShowActiveStreamOnly = showActiveStreamOnly();
mHasSeenODICaptionsTooltip = mHasSeenODICaptionsTooltip =
Prefs.getBoolean(context, Prefs.Key.HAS_SEEN_ODI_CAPTIONS_TOOLTIP, false); 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.addCallback(mControllerCallbackH, mHandler);
mController.getState(); mController.getState();
Dependency.get(ConfigurationController.class).addCallback(this); mConfigurationController.addCallback(this);
} }
@Override @Override
public void destroy() { public void destroy() {
mController.removeCallback(mControllerCallbackH); mController.removeCallback(mControllerCallbackH);
mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(null);
Dependency.get(ConfigurationController.class).removeCallback(this); mConfigurationController.removeCallback(this);
} }
@Override @Override
@@ -1017,9 +1030,8 @@ public class VolumeDialogImpl implements VolumeDialog,
Events.writeEvent(Events.EVENT_SETTINGS_CLICK); Events.writeEvent(Events.EVENT_SETTINGS_CLICK);
Intent intent = new Intent(Settings.Panel.ACTION_VOLUME); Intent intent = new Intent(Settings.Panel.ACTION_VOLUME);
dismissH(DISMISS_REASON_SETTINGS_CLICKED); dismissH(DISMISS_REASON_SETTINGS_CLICKED);
Dependency.get(MediaOutputDialogFactory.class).dismiss(); mMediaOutputDialogFactory.dismiss();
Dependency.get(ActivityStarter.class).startActivity(intent, mActivityStarter.startActivity(intent, true /* dismissShade */);
true /* dismissShade */);
}); });
} }
} }

View File

@@ -16,11 +16,23 @@
package com.android.systemui.volume.dagger; 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.VolumeComponent;
import com.android.systemui.volume.VolumeDialogComponent; import com.android.systemui.volume.VolumeDialogComponent;
import com.android.systemui.volume.VolumeDialogImpl;
import dagger.Binds; import dagger.Binds;
import dagger.Module; import dagger.Module;
import dagger.Provides;
/** Dagger Module for code in the volume package. */ /** Dagger Module for code in the volume package. */
@@ -29,4 +41,28 @@ public interface VolumeModule {
/** */ /** */
@Binds @Binds
VolumeComponent provideVolumeComponent(VolumeDialogComponent volumeDialogComponent); 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;
}
} }

View File

@@ -41,9 +41,13 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.Prefs; import com.android.systemui.Prefs;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.SysuiTestCase; 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;
import com.android.systemui.plugins.VolumeDialogController.State; import com.android.systemui.plugins.VolumeDialogController.State;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; 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.Before;
import org.junit.Test; import org.junit.Test;
@@ -68,23 +72,34 @@ public class VolumeDialogImplTest extends SysuiTestCase {
View mDrawerNormal; View mDrawerNormal;
@Mock @Mock
VolumeDialogController mController; VolumeDialogController mVolumeDialogController;
@Mock @Mock
KeyguardManager mKeyguard; KeyguardManager mKeyguard;
@Mock @Mock
AccessibilityManagerWrapper mAccessibilityMgr; AccessibilityManagerWrapper mAccessibilityMgr;
@Mock
DeviceProvisionedController mDeviceProvisionedController;
@Mock
ConfigurationController mConfigurationController;
@Mock
MediaOutputDialogFactory mMediaOutputDialogFactory;
@Mock
ActivityStarter mActivityStarter;
@Before @Before
public void setup() throws Exception { public void setup() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mController = mDependency.injectMockDependency(VolumeDialogController.class);
mAccessibilityMgr = mDependency.injectMockDependency(AccessibilityManagerWrapper.class);
getContext().addMockSystemService(KeyguardManager.class, mKeyguard); getContext().addMockSystemService(KeyguardManager.class, mKeyguard);
mDialog = new VolumeDialogImpl(getContext()); mDialog = new VolumeDialogImpl(
getContext(),
mVolumeDialogController,
mAccessibilityMgr,
mDeviceProvisionedController,
mConfigurationController,
mMediaOutputDialogFactory,
mActivityStarter);
mDialog.init(0, null); mDialog.init(0, null);
State state = createShellState(); State state = createShellState();
mDialog.onStateChangedH(state); mDialog.onStateChangedH(state);
@@ -170,7 +185,7 @@ public class VolumeDialogImplTest extends SysuiTestCase {
Mockito.reset(mAccessibilityMgr); Mockito.reset(mAccessibilityMgr);
ArgumentCaptor<VolumeDialogController.Callbacks> controllerCallbackCapture = ArgumentCaptor<VolumeDialogController.Callbacks> controllerCallbackCapture =
ArgumentCaptor.forClass(VolumeDialogController.Callbacks.class); ArgumentCaptor.forClass(VolumeDialogController.Callbacks.class);
verify(mController).addCallback(controllerCallbackCapture.capture(), any()); verify(mVolumeDialogController).addCallback(controllerCallbackCapture.capture(), any());
VolumeDialogController.Callbacks callbacks = controllerCallbackCapture.getValue(); VolumeDialogController.Callbacks callbacks = controllerCallbackCapture.getValue();
callbacks.onShowSafetyWarning(AudioManager.FLAG_SHOW_UI); callbacks.onShowSafetyWarning(AudioManager.FLAG_SHOW_UI);
verify(mAccessibilityMgr).getRecommendedTimeoutMillis( verify(mAccessibilityMgr).getRecommendedTimeoutMillis(
@@ -201,13 +216,13 @@ public class VolumeDialogImplTest extends SysuiTestCase {
mDialog.onStateChangedH(initialSilentState); mDialog.onStateChangedH(initialSilentState);
// expected: shouldn't call vibrate yet // expected: shouldn't call vibrate yet
verify(mController, never()).vibrate(any()); verify(mVolumeDialogController, never()).vibrate(any());
// changed ringer to vibrate // changed ringer to vibrate
mDialog.onStateChangedH(vibrateState); mDialog.onStateChangedH(vibrateState);
// expected: vibrate device // expected: vibrate device
verify(mController).vibrate(any()); verify(mVolumeDialogController).vibrate(any());
} }
@Test @Test
@@ -225,7 +240,7 @@ public class VolumeDialogImplTest extends SysuiTestCase {
mDialog.onStateChangedH(vibrateState); mDialog.onStateChangedH(vibrateState);
// shouldn't call vibrate // shouldn't call vibrate
verify(mController, never()).vibrate(any()); verify(mVolumeDialogController, never()).vibrate(any());
} }
@Test @Test
@@ -238,7 +253,7 @@ public class VolumeDialogImplTest extends SysuiTestCase {
mDrawerVibrate.performClick(); mDrawerVibrate.performClick();
// Make sure we've actually changed the ringer mode. // Make sure we've actually changed the ringer mode.
verify(mController, times(1)).setRingerMode( verify(mVolumeDialogController, times(1)).setRingerMode(
AudioManager.RINGER_MODE_VIBRATE, false); AudioManager.RINGER_MODE_VIBRATE, false);
} }
@@ -252,7 +267,7 @@ public class VolumeDialogImplTest extends SysuiTestCase {
mDrawerMute.performClick(); mDrawerMute.performClick();
// Make sure we've actually changed the ringer mode. // Make sure we've actually changed the ringer mode.
verify(mController, times(1)).setRingerMode( verify(mVolumeDialogController, times(1)).setRingerMode(
AudioManager.RINGER_MODE_SILENT, false); AudioManager.RINGER_MODE_SILENT, false);
} }
@@ -266,7 +281,7 @@ public class VolumeDialogImplTest extends SysuiTestCase {
mDrawerNormal.performClick(); mDrawerNormal.performClick();
// Make sure we've actually changed the ringer mode. // Make sure we've actually changed the ringer mode.
verify(mController, times(1)).setRingerMode( verify(mVolumeDialogController, times(1)).setRingerMode(
AudioManager.RINGER_MODE_NORMAL, false); AudioManager.RINGER_MODE_NORMAL, false);
} }