diff options
| -rw-r--r-- | services/core/java/com/android/server/vibrator/VibrationSettings.java | 137 | ||||
| -rw-r--r-- | services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java | 134 |
2 files changed, 136 insertions, 135 deletions
diff --git a/services/core/java/com/android/server/vibrator/VibrationSettings.java b/services/core/java/com/android/server/vibrator/VibrationSettings.java index 227b6b410e6b..a0dca946a718 100644 --- a/services/core/java/com/android/server/vibrator/VibrationSettings.java +++ b/services/core/java/com/android/server/vibrator/VibrationSettings.java @@ -31,6 +31,7 @@ import static android.os.VibrationAttributes.USAGE_UNKNOWN; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; +import android.app.IActivityManager; import android.app.SynchronousUserSwitchObserver; import android.app.UidObserver; import android.content.BroadcastReceiver; @@ -73,6 +74,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; /** Controls all the system settings related to vibration. */ @@ -146,9 +148,6 @@ final class VibrationSettings { PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT)); - private static final IntentFilter INTERNAL_RINGER_MODE_CHANGED_INTENT_FILTER = - new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); - /** Listener for changes on vibration settings. */ interface OnVibratorSettingsChanged { /** Callback triggered when any of the vibrator settings change. */ @@ -157,15 +156,18 @@ final class VibrationSettings { private final Object mLock = new Object(); private final Context mContext; - private final String mSystemUiPackage; @VisibleForTesting final SettingsContentObserver mSettingObserver; @VisibleForTesting - final SettingsBroadcastReceiver mSettingChangeReceiver; + final RingerModeBroadcastReceiver mRingerModeBroadcastReceiver; + @VisibleForTesting + final BatteryBroadcastReceiver mBatteryBroadcastReceiver; @VisibleForTesting final VibrationUidObserver mUidObserver; @VisibleForTesting final VibrationUserSwitchObserver mUserSwitchObserver; + @VisibleForTesting + final VibrationLowPowerModeListener mLowPowerModeListener; @GuardedBy("mLock") private final List<OnVibratorSettingsChanged> mListeners = new ArrayList<>(); @@ -179,10 +181,13 @@ final class VibrationSettings { @GuardedBy("mLock") @Nullable private PowerManagerInternal mPowerManagerInternal; + @GuardedBy("mLock") @Nullable private VirtualDeviceManagerInternal mVirtualDeviceManagerInternal; @GuardedBy("mLock") + private String mSystemUiPackage; + @GuardedBy("mLock") private boolean mVibrateInputDevices; @GuardedBy("mLock") private SparseIntArray mCurrentVibrationIntensities = new SparseIntArray(); @@ -206,11 +211,11 @@ final class VibrationSettings { mContext = context; mVibrationConfig = config; mSettingObserver = new SettingsContentObserver(handler); - mSettingChangeReceiver = new SettingsBroadcastReceiver(); + mRingerModeBroadcastReceiver = new RingerModeBroadcastReceiver(); + mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(); mUidObserver = new VibrationUidObserver(); mUserSwitchObserver = new VibrationUserSwitchObserver(); - mSystemUiPackage = LocalServices.getService(PackageManagerInternal.class) - .getSystemUiServiceComponent().getPackageName(); + mLowPowerModeListener = new VibrationLowPowerModeListener(); VibrationEffect clickEffect = createEffectFromResource( com.android.internal.R.array.config_virtualKeyVibePattern); @@ -234,18 +239,34 @@ final class VibrationSettings { } public void onSystemReady() { - PowerManagerInternal pm = LocalServices.getService(PowerManagerInternal.class); - AudioManager am = mContext.getSystemService(AudioManager.class); - int ringerMode = (am == null) ? mRingerMode : am.getRingerModeInternal(); + onSystemReady(LocalServices.getService(PackageManagerInternal.class), + LocalServices.getService(PowerManagerInternal.class), + ActivityManager.getService(), + LocalServices.getService(VirtualDeviceManagerInternal.class), + mContext.getSystemService(AudioManager.class)); + } + + @VisibleForTesting + void onSystemReady(PackageManagerInternal packageManagerInternal, + PowerManagerInternal powerManagerInternal, + IActivityManager activityManagerInternal, + @Nullable VirtualDeviceManagerInternal virtualDeviceManagerInternal, + @Nullable AudioManager audioManager) { + int ringerMode = (audioManager == null) + ? AudioManager.RINGER_MODE_NORMAL + : audioManager.getRingerModeInternal(); + String sysUiPackage = packageManagerInternal.getSystemUiServiceComponent().getPackageName(); synchronized (mLock) { - mPowerManagerInternal = pm; - mAudioManager = am; + mPowerManagerInternal = powerManagerInternal; + mVirtualDeviceManagerInternal = virtualDeviceManagerInternal; + mAudioManager = audioManager; mRingerMode = ringerMode; + mSystemUiPackage = sysUiPackage; } try { - ActivityManager.getService().registerUidObserver(mUidObserver, + activityManagerInternal.registerUidObserver(mUidObserver, ActivityManager.UID_OBSERVER_PROCSTATE | ActivityManager.UID_OBSERVER_GONE, ActivityManager.PROCESS_STATE_UNKNOWN, /* callingPackage= */ null); } catch (RemoteException e) { @@ -253,32 +274,16 @@ final class VibrationSettings { } try { - ActivityManager.getService().registerUserSwitchObserver(mUserSwitchObserver, TAG); + activityManagerInternal.registerUserSwitchObserver(mUserSwitchObserver, TAG); } catch (RemoteException e) { // ignored; both services live in system_server } - pm.registerLowPowerModeObserver( - new PowerManagerInternal.LowPowerModeListener() { - @Override - public int getServiceType() { - return PowerManager.ServiceType.VIBRATION; - } - - @Override - public void onLowPowerModeChanged(PowerSaveState result) { - boolean shouldNotifyListeners; - synchronized (mLock) { - shouldNotifyListeners = result.batterySaverEnabled != mBatterySaverMode; - mBatterySaverMode = result.batterySaverEnabled; - } - if (shouldNotifyListeners) { - notifyListeners(); - } - } - }); - - registerSettingsChangeReceiver(INTERNAL_RINGER_MODE_CHANGED_INTENT_FILTER); + powerManagerInternal.registerLowPowerModeObserver(mLowPowerModeListener); + + mContext.registerReceiver(mRingerModeBroadcastReceiver, + new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION), + Context.RECEIVER_EXPORTED_UNAUDITED); // Listen to all settings that might affect the result of Vibrator.getVibrationIntensity. registerSettingsObserver(Settings.System.getUriFor(Settings.System.VIBRATE_INPUT_DEVICES)); @@ -302,12 +307,7 @@ final class VibrationSettings { if (mVibrationConfig.ignoreVibrationsOnWirelessCharger()) { Intent batteryStatus = mContext.registerReceiver( - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - updateBatteryInfo(intent); - } - }, + mBatteryBroadcastReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED), Context.RECEIVER_NOT_EXPORTED); // After registering the receiver for battery status, process the sticky broadcast that @@ -477,8 +477,10 @@ final class VibrationSettings { public boolean shouldCancelVibrationOnScreenOff(@NonNull Vibration.CallerInfo callerInfo, long vibrationStartUptimeMillis) { PowerManagerInternal pm; + String sysUiPackageName; synchronized (mLock) { pm = mPowerManagerInternal; + sysUiPackageName = mSystemUiPackage; } if (pm != null) { // The SleepData from PowerManager may refer to a more recent sleep than the broadcast @@ -502,7 +504,7 @@ final class VibrationSettings { } // Only allow vibrations from System packages to continue vibrating when the screen goes off return callerInfo.uid != Process.SYSTEM_UID && callerInfo.uid != 0 - && !mSystemUiPackage.equals(callerInfo.opPkg); + && !Objects.equals(sysUiPackageName, callerInfo.opPkg); } /** @@ -785,11 +787,6 @@ final class VibrationSettings { UserHandle.USER_ALL); } - private void registerSettingsChangeReceiver(IntentFilter intentFilter) { - mContext.registerReceiver(mSettingChangeReceiver, intentFilter, - Context.RECEIVER_EXPORTED_UNAUDITED); - } - @Nullable private VibrationEffect createEffectFromResource(int resId) { return createEffectFromResource(mContext.getResources(), resId); @@ -836,12 +833,11 @@ final class VibrationSettings { } private boolean isAppRunningOnAnyVirtualDevice(int uid) { - if (mVirtualDeviceManagerInternal == null) { - mVirtualDeviceManagerInternal = - LocalServices.getService(VirtualDeviceManagerInternal.class); + VirtualDeviceManagerInternal vdm; + synchronized (mLock) { + vdm = mVirtualDeviceManagerInternal; } - return mVirtualDeviceManagerInternal != null - && mVirtualDeviceManagerInternal.isAppRunningOnAnyVirtualDevice(uid); + return vdm != null && vdm.isAppRunningOnAnyVirtualDevice(uid); } /** Implementation of {@link ContentObserver} to be registered to a setting {@link Uri}. */ @@ -860,7 +856,7 @@ final class VibrationSettings { /** Implementation of {@link BroadcastReceiver} to update on ringer mode change. */ @VisibleForTesting - final class SettingsBroadcastReceiver extends BroadcastReceiver { + final class RingerModeBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); @@ -871,6 +867,18 @@ final class VibrationSettings { } } + /** Implementation of {@link BroadcastReceiver} to update on battery mode change. */ + @VisibleForTesting + final class BatteryBroadcastReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { + updateBatteryInfo(intent); + } + } + } + /** Implementation of {@link ContentObserver} to be registered to a setting {@link Uri}. */ @VisibleForTesting final class VibrationUidObserver extends UidObserver { @@ -916,4 +924,25 @@ final class VibrationSettings { update(); } } + + /** Implementation of {@link PowerManagerInternal.LowPowerModeListener} for low battery. */ + @VisibleForTesting + final class VibrationLowPowerModeListener implements PowerManagerInternal.LowPowerModeListener { + @Override + public int getServiceType() { + return PowerManager.ServiceType.VIBRATION; + } + + @Override + public void onLowPowerModeChanged(PowerSaveState result) { + boolean shouldNotifyListeners; + synchronized (mLock) { + shouldNotifyListeners = result.batterySaverEnabled != mBatterySaverMode; + mBatterySaverMode = result.batterySaverEnabled; + } + if (shouldNotifyListeners) { + notifyListeners(); + } + } + } } diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java index 21604df87fe7..0f2017897719 100644 --- a/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java +++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java @@ -43,7 +43,8 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -51,12 +52,14 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.app.ActivityManager; +import android.app.IActivityManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.PackageManagerInternal; import android.media.AudioManager; import android.os.Handler; @@ -80,10 +83,8 @@ import androidx.test.InstrumentationRegistry; import com.android.internal.util.test.FakeSettingsProvider; import com.android.internal.util.test.FakeSettingsProviderRule; -import com.android.server.LocalServices; import com.android.server.companion.virtual.VirtualDeviceManagerInternal; -import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -100,8 +101,7 @@ public class VibrationSettingsTest { @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); - private static final int OLD_USER_ID = 123; - private static final int NEW_USER_ID = 456; + private static final int USER_ID = 123; private static final int UID = 1; private static final int VIRTUAL_DEVICE_ID = 1; private static final String SYSUI_PACKAGE_NAME = "sysui"; @@ -130,13 +130,12 @@ public class VibrationSettingsTest { @Mock private VirtualDeviceManagerInternal mVirtualDeviceManagerInternalMock; @Mock private PackageManagerInternal mPackageManagerInternalMock; @Mock private AudioManager mAudioManagerMock; + @Mock private IActivityManager mActivityManagerMock; @Mock private VibrationConfig mVibrationConfigMock; private TestLooper mTestLooper; private ContextWrapper mContextSpy; private VibrationSettings mVibrationSettings; - private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener; - private BroadcastReceiver mRegisteredBatteryBroadcastReceiver; @Before public void setUp() throws Exception { @@ -144,24 +143,20 @@ public class VibrationSettingsTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext())); ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy); - when(mContextSpy.getContentResolver()).thenReturn(contentResolver); - when(mContextSpy.getSystemService(eq(Context.AUDIO_SERVICE))).thenReturn(mAudioManagerMock); - doAnswer(invocation -> { - mRegisteredPowerModeListener = invocation.getArgument(0); - return null; - }).when(mPowerManagerInternalMock).registerLowPowerModeObserver(any()); + doReturn(contentResolver).when(mContextSpy).getContentResolver(); + + // Make sure broadcast receivers are not registered for this test, to avoid flakes. + doReturn(null).when(mContextSpy) + .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class), anyInt()); when(mPackageManagerInternalMock.getSystemUiServiceComponent()) .thenReturn(new ComponentName(SYSUI_PACKAGE_NAME, "")); - removeServicesForTest(); - addServicesForTest(); - setDefaultIntensity(VIBRATION_INTENSITY_MEDIUM); setIgnoreVibrationsOnWirelessCharger(false); - createSystemReadyVibrationSettings(); mockGoToSleep(/* goToSleepTime= */ 0, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT); + createSystemReadyVibrationSettings(); } private void createSystemReadyVibrationSettings() { @@ -175,38 +170,18 @@ public class VibrationSettingsTest { setUserSetting(Settings.System.APPLY_RAMPING_RINGER, 0); setRingerMode(AudioManager.RINGER_MODE_NORMAL); - mVibrationSettings.onSystemReady(); - } - - private void removeServicesForTest() { - LocalServices.removeServiceForTest(PowerManagerInternal.class); - LocalServices.removeServiceForTest(PackageManagerInternal.class); - LocalServices.removeServiceForTest(VirtualDeviceManagerInternal.class); - } - - private void addServicesForTest() { - LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock); - LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock); - LocalServices.addService(VirtualDeviceManagerInternal.class, - mVirtualDeviceManagerInternalMock); - } - - @After - public void tearDown() throws Exception { - removeServicesForTest(); + mVibrationSettings.onSystemReady(mPackageManagerInternalMock, mPowerManagerInternalMock, + mActivityManagerMock, mVirtualDeviceManagerInternalMock, mAudioManagerMock); } @Test public void create_withOnlyRequiredSystemServices() { - // The only core services that we depend on are PowerManager and PackageManager - removeServicesForTest(); - LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock); - LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock); - when(mContextSpy.getSystemService(eq(Context.AUDIO_SERVICE))).thenReturn(null); - VibrationSettings minimalVibrationSettings = new VibrationSettings(mContextSpy, new Handler(mTestLooper.getLooper()), mVibrationConfigMock); - minimalVibrationSettings.onSystemReady(); + + // The only core services that we depend on are Power, Package and Activity managers + minimalVibrationSettings.onSystemReady(mPackageManagerInternalMock, + mPowerManagerInternalMock, mActivityManagerMock, null, null); } @Test @@ -214,8 +189,8 @@ public class VibrationSettingsTest { mVibrationSettings.addListener(mListenerMock); // Testing the broadcast flow manually. - mVibrationSettings.mUserSwitchObserver.onUserSwitching(NEW_USER_ID); - mVibrationSettings.mUserSwitchObserver.onUserSwitchComplete(NEW_USER_ID); + mVibrationSettings.mUserSwitchObserver.onUserSwitching(USER_ID); + mVibrationSettings.mUserSwitchObserver.onUserSwitchComplete(USER_ID); verify(mListenerMock, times(2)).onChange(); } @@ -225,9 +200,9 @@ public class VibrationSettingsTest { mVibrationSettings.addListener(mListenerMock); // Testing the broadcast flow manually. - mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy, + mVibrationSettings.mRingerModeBroadcastReceiver.onReceive(mContextSpy, new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)); - mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy, + mVibrationSettings.mRingerModeBroadcastReceiver.onReceive(mContextSpy, new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)); verify(mListenerMock, times(2)).onChange(); @@ -249,9 +224,9 @@ public class VibrationSettingsTest { mVibrationSettings.addListener(mListenerMock); // Testing the broadcast flow manually. - mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE); - mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); - mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); // No change. + mVibrationSettings.mLowPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE); + mVibrationSettings.mLowPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); + mVibrationSettings.mLowPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); // Noop. verify(mListenerMock, times(2)).onChange(); } @@ -266,10 +241,9 @@ public class VibrationSettingsTest { mVibrationSettings.removeListener(mListenerMock); // Trigger multiple observers manually. - mVibrationSettings.mSettingObserver.onChange(false); - mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE); - mVibrationSettings.mUserSwitchObserver.onUserSwitchComplete(NEW_USER_ID); - mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy, + mVibrationSettings.mLowPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE); + mVibrationSettings.mUserSwitchObserver.onUserSwitchComplete(USER_ID); + mVibrationSettings.mRingerModeBroadcastReceiver.onReceive(mContextSpy, new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)); verifyNoMoreInteractions(mListenerMock); @@ -310,11 +284,12 @@ public class VibrationSettingsTest { @Test public void wirelessChargingVibrationsEnabled_doesNotRegisterBatteryReceiver_allowsAnyUsage() { - setBatteryReceiverRegistrationResult(getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS)); setIgnoreVibrationsOnWirelessCharger(false); createSystemReadyVibrationSettings(); - assertNull(mRegisteredBatteryBroadcastReceiver); + verify(mContextSpy, never()).registerReceiver(any(BroadcastReceiver.class), + argThat(filter -> filter.matchAction(Intent.ACTION_BATTERY_CHANGED)), anyInt()); + for (int usage : ALL_USAGES) { assertVibrationNotIgnoredForUsage(usage); } @@ -322,7 +297,6 @@ public class VibrationSettingsTest { @Test public void shouldIgnoreVibration_noBatteryIntentWhenSystemReady_allowsAnyUsage() { - setBatteryReceiverRegistrationResult(null); setIgnoreVibrationsOnWirelessCharger(true); createSystemReadyVibrationSettings(); @@ -334,7 +308,9 @@ public class VibrationSettingsTest { @Test public void shouldIgnoreVibration_onNonWirelessChargerWhenSystemReady_allowsAnyUsage() { Intent nonWirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_USB); - setBatteryReceiverRegistrationResult(nonWirelessChargingIntent); + doReturn(nonWirelessChargingIntent).when(mContextSpy).registerReceiver( + any(BroadcastReceiver.class), + argThat(filter -> filter.matchAction(Intent.ACTION_BATTERY_CHANGED)), anyInt()); setIgnoreVibrationsOnWirelessCharger(true); createSystemReadyVibrationSettings(); @@ -346,7 +322,9 @@ public class VibrationSettingsTest { @Test public void shouldIgnoreVibration_onWirelessChargerWhenSystemReady_doesNotAllowFromAnyUsage() { Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS); - setBatteryReceiverRegistrationResult(wirelessChargingIntent); + doReturn(wirelessChargingIntent).when(mContextSpy).registerReceiver( + any(BroadcastReceiver.class), + argThat(filter -> filter.matchAction(Intent.ACTION_BATTERY_CHANGED)), anyInt()); setIgnoreVibrationsOnWirelessCharger(true); createSystemReadyVibrationSettings(); @@ -357,13 +335,12 @@ public class VibrationSettingsTest { @Test public void shouldIgnoreVibration_receivesWirelessChargingIntent_doesNotAllowFromAnyUsage() { - Intent nonWirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_USB); - setBatteryReceiverRegistrationResult(nonWirelessChargingIntent); setIgnoreVibrationsOnWirelessCharger(true); createSystemReadyVibrationSettings(); Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS); - mRegisteredBatteryBroadcastReceiver.onReceive(mContextSpy, wirelessChargingIntent); + mVibrationSettings.mBatteryBroadcastReceiver.onReceive( + mContextSpy, wirelessChargingIntent); for (int usage : ALL_USAGES) { assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_ON_WIRELESS_CHARGER); @@ -372,17 +349,21 @@ public class VibrationSettingsTest { @Test public void shouldIgnoreVibration_receivesNonWirelessChargingIntent_allowsAnyUsage() { - Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS); - setBatteryReceiverRegistrationResult(wirelessChargingIntent); setIgnoreVibrationsOnWirelessCharger(true); createSystemReadyVibrationSettings(); + + Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS); + mVibrationSettings.mBatteryBroadcastReceiver.onReceive( + mContextSpy, wirelessChargingIntent); + // Check that initially, all usages are ignored due to the wireless charging. for (int usage : ALL_USAGES) { assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_ON_WIRELESS_CHARGER); } Intent nonWirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_USB); - mRegisteredBatteryBroadcastReceiver.onReceive(mContextSpy, nonWirelessChargingIntent); + mVibrationSettings.mBatteryBroadcastReceiver.onReceive( + mContextSpy, nonWirelessChargingIntent); for (int usage : ALL_USAGES) { assertVibrationNotIgnoredForUsage(usage); @@ -399,7 +380,7 @@ public class VibrationSettingsTest { USAGE_HARDWARE_FEEDBACK )); - mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE); + mVibrationSettings.mLowPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE); for (int usage : ALL_USAGES) { if (expectedAllowedVibrations.contains(usage)) { @@ -412,7 +393,7 @@ public class VibrationSettingsTest { @Test public void shouldIgnoreVibration_notInBatterySaverMode_allowsAnyUsage() { - mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); + mVibrationSettings.mLowPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); for (int usage : ALL_USAGES) { assertVibrationNotIgnoredForUsage(usage); @@ -605,7 +586,7 @@ public class VibrationSettingsTest { // Testing the broadcast flow manually. when(mAudioManagerMock.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT); - mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy, + mVibrationSettings.mRingerModeBroadcastReceiver.onReceive(mContextSpy, new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)); assertVibrationIgnoredForUsage(USAGE_RINGTONE, Vibration.Status.IGNORED_FOR_RINGER_MODE); @@ -868,16 +849,15 @@ public class VibrationSettingsTest { mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE)); // Test early update of settings based on new user id. - putUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW, - NEW_USER_ID); - mVibrationSettings.mUserSwitchObserver.onUserSwitching(NEW_USER_ID); + putUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW, USER_ID); + mVibrationSettings.mUserSwitchObserver.onUserSwitching(USER_ID); assertEquals(VIBRATION_INTENSITY_LOW, mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE)); // Test later update of settings for UserHandle.USER_CURRENT. putUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW, UserHandle.USER_CURRENT); - mVibrationSettings.mUserSwitchObserver.onUserSwitchComplete(NEW_USER_ID); + mVibrationSettings.mUserSwitchObserver.onUserSwitchComplete(USER_ID); assertEquals(VIBRATION_INTENSITY_LOW, mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE)); } @@ -1010,7 +990,7 @@ public class VibrationSettingsTest { private void setRingerMode(int ringerMode) { when(mAudioManagerMock.getRingerModeInternal()).thenReturn(ringerMode); // Mock AudioManager broadcast of internal ringer mode change. - mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy, + mVibrationSettings.mRingerModeBroadcastReceiver.onReceive(mContextSpy, new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)); } @@ -1025,14 +1005,6 @@ public class VibrationSettingsTest { return new Vibration.CallerInfo(attrs, uid, VIRTUAL_DEVICE_ID, opPkg, null); } - private void setBatteryReceiverRegistrationResult(Intent result) { - doAnswer(invocation -> { - mRegisteredBatteryBroadcastReceiver = invocation.getArgument(0); - return result; - }).when(mContextSpy).registerReceiver(any(BroadcastReceiver.class), - argThat(filter -> filter.matchAction(Intent.ACTION_BATTERY_CHANGED)), anyInt()); - } - private Intent getBatteryChangedIntent(int extraPluggedValue) { Intent batteryIntent = new Intent(Intent.ACTION_BATTERY_CHANGED); batteryIntent.putExtra(EXTRA_PLUGGED, extraPluggedValue); |