Loading services/core/java/com/android/server/vibrator/VibrationSettings.java +11 −4 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.provider.Settings; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.server.LocalServices; import java.util.ArrayList; Loading @@ -59,7 +60,8 @@ public final class VibrationSettings { private final Vibrator mVibrator; private final AudioManager mAudioManager; private final SettingsObserver mSettingObserver; private final UidObserver mUidObserver; @VisibleForTesting final UidObserver mUidObserver; @GuardedBy("mLock") private final List<OnVibratorSettingsChanged> mListeners = new ArrayList<>(); Loading Loading @@ -251,8 +253,7 @@ public final class VibrationSettings { * allowed to play in the background (i.e. it's a notification, ringtone or alarm vibration). */ public boolean shouldVibrateForUid(int uid, int usageHint) { return mUidObserver.isUidForeground(uid) || isNotification(usageHint) || isRingtone(usageHint) || isAlarm(usageHint); return mUidObserver.isUidForeground(uid) || isClassAlarm(usageHint); } /** Loading Loading @@ -292,6 +293,11 @@ public final class VibrationSettings { return usageHint == VibrationAttributes.USAGE_ALARM; } private static boolean isClassAlarm(int usageHint) { return (usageHint & VibrationAttributes.USAGE_CLASS_MASK) == VibrationAttributes.USAGE_CLASS_ALARM; } /** Updates all vibration settings and triggers registered listeners. */ public void updateSettings() { synchronized (mLock) { Loading Loading @@ -414,7 +420,8 @@ public final class VibrationSettings { } /** Implementation of {@link ContentObserver} to be registered to a setting {@link Uri}. */ private final class UidObserver extends IUidObserver.Stub { @VisibleForTesting final class UidObserver extends IUidObserver.Stub { private final SparseArray<Integer> mProcStatesCache = new SparseArray<>(); public boolean isUidForeground(int uid) { Loading services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java +16 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.ContentResolver; import android.content.Context; import android.content.ContextWrapper; Loading @@ -36,7 +37,6 @@ import android.media.AudioManager; import android.os.Handler; import android.os.PowerManagerInternal; import android.os.PowerSaveState; import android.os.RemoteException; import android.os.UserHandle; import android.os.VibrationAttributes; import android.os.VibrationEffect; Loading Loading @@ -229,8 +229,22 @@ public class VibrationSettingsTest { } @Test public void shouldVibrateForUid_withBackgroundAllowedUsage_returnTrue() throws RemoteException { public void shouldVibrateForUid_withForegroundOnlyUsage_returnsTrueWhInForeground() { assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_TOUCH)); mVibrationSettings.mUidObserver.onUidStateChanged( UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0); assertFalse(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_TOUCH)); } @Test public void shouldVibrateForUid_withBackgroundAllowedUsage_returnTrue() { mVibrationSettings.mUidObserver.onUidStateChanged( UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_ALARM)); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_COMMUNICATION_REQUEST)); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_NOTIFICATION)); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_RINGTONE)); Loading Loading @@ -377,5 +391,4 @@ public class VibrationSettingsTest { mAudioManager.setRingerModeInternal(ringerMode); assertEquals(ringerMode, mAudioManager.getRingerModeInternal()); } } Loading
services/core/java/com/android/server/vibrator/VibrationSettings.java +11 −4 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.provider.Settings; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.server.LocalServices; import java.util.ArrayList; Loading @@ -59,7 +60,8 @@ public final class VibrationSettings { private final Vibrator mVibrator; private final AudioManager mAudioManager; private final SettingsObserver mSettingObserver; private final UidObserver mUidObserver; @VisibleForTesting final UidObserver mUidObserver; @GuardedBy("mLock") private final List<OnVibratorSettingsChanged> mListeners = new ArrayList<>(); Loading Loading @@ -251,8 +253,7 @@ public final class VibrationSettings { * allowed to play in the background (i.e. it's a notification, ringtone or alarm vibration). */ public boolean shouldVibrateForUid(int uid, int usageHint) { return mUidObserver.isUidForeground(uid) || isNotification(usageHint) || isRingtone(usageHint) || isAlarm(usageHint); return mUidObserver.isUidForeground(uid) || isClassAlarm(usageHint); } /** Loading Loading @@ -292,6 +293,11 @@ public final class VibrationSettings { return usageHint == VibrationAttributes.USAGE_ALARM; } private static boolean isClassAlarm(int usageHint) { return (usageHint & VibrationAttributes.USAGE_CLASS_MASK) == VibrationAttributes.USAGE_CLASS_ALARM; } /** Updates all vibration settings and triggers registered listeners. */ public void updateSettings() { synchronized (mLock) { Loading Loading @@ -414,7 +420,8 @@ public final class VibrationSettings { } /** Implementation of {@link ContentObserver} to be registered to a setting {@link Uri}. */ private final class UidObserver extends IUidObserver.Stub { @VisibleForTesting final class UidObserver extends IUidObserver.Stub { private final SparseArray<Integer> mProcStatesCache = new SparseArray<>(); public boolean isUidForeground(int uid) { Loading
services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java +16 −3 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.ContentResolver; import android.content.Context; import android.content.ContextWrapper; Loading @@ -36,7 +37,6 @@ import android.media.AudioManager; import android.os.Handler; import android.os.PowerManagerInternal; import android.os.PowerSaveState; import android.os.RemoteException; import android.os.UserHandle; import android.os.VibrationAttributes; import android.os.VibrationEffect; Loading Loading @@ -229,8 +229,22 @@ public class VibrationSettingsTest { } @Test public void shouldVibrateForUid_withBackgroundAllowedUsage_returnTrue() throws RemoteException { public void shouldVibrateForUid_withForegroundOnlyUsage_returnsTrueWhInForeground() { assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_TOUCH)); mVibrationSettings.mUidObserver.onUidStateChanged( UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0); assertFalse(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_TOUCH)); } @Test public void shouldVibrateForUid_withBackgroundAllowedUsage_returnTrue() { mVibrationSettings.mUidObserver.onUidStateChanged( UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_ALARM)); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_COMMUNICATION_REQUEST)); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_NOTIFICATION)); assertTrue(mVibrationSettings.shouldVibrateForUid(UID, VibrationAttributes.USAGE_RINGTONE)); Loading Loading @@ -377,5 +391,4 @@ public class VibrationSettingsTest { mAudioManager.setRingerModeInternal(ringerMode); assertEquals(ringerMode, mAudioManager.getRingerModeInternal()); } }