|
16 | 16 |
|
17 | 17 | package android.media; |
18 | 18 |
|
| 19 | +import static android.media.AudioManager.RINGER_MODE_NORMAL; |
| 20 | +import static android.media.AudioManager.RINGER_MODE_SILENT; |
| 21 | +import static android.media.AudioManager.RINGER_MODE_VIBRATE; |
| 22 | + |
19 | 23 | import android.app.ActivityManagerNative; |
20 | 24 | import android.app.KeyguardManager; |
21 | 25 | import android.app.PendingIntent; |
@@ -528,8 +532,8 @@ public void adjustStreamVolume(int streamType, int direction, int flags) { |
528 | 532 | (!mVoiceCapable && streamType != AudioSystem.STREAM_VOICE_CALL && |
529 | 533 | streamType != AudioSystem.STREAM_BLUETOOTH_SCO) || |
530 | 534 | (mVoiceCapable && streamTypeAlias == AudioSystem.STREAM_RING)) { |
531 | | - // do not vibrate if already in silent mode |
532 | | - if (mRingerMode != AudioManager.RINGER_MODE_NORMAL) { |
| 535 | + // do not vibrate if already in vibrate mode |
| 536 | + if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) { |
533 | 537 | flags &= ~AudioManager.FLAG_VIBRATE; |
534 | 538 | } |
535 | 539 | // Check if the ringer mode changes with this volume adjustment. If |
@@ -1621,26 +1625,36 @@ private boolean checkForRingerModeChange(int oldIndex, int direction, int stream |
1621 | 1625 | boolean adjustVolumeIndex = true; |
1622 | 1626 | int newRingerMode = mRingerMode; |
1623 | 1627 | int uiIndex = (oldIndex + 5) / 10; |
| 1628 | + boolean vibeInSilent = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1; |
1624 | 1629 |
|
1625 | | - if (mRingerMode == AudioManager.RINGER_MODE_NORMAL) { |
| 1630 | + if (mRingerMode == RINGER_MODE_NORMAL) { |
1626 | 1631 | if ((direction == AudioManager.ADJUST_LOWER) && (uiIndex <= 1)) { |
1627 | 1632 | // enter silent mode if current index is the last audible one and not repeating a |
1628 | 1633 | // volume key down |
1629 | | - if (mPrevVolDirection != AudioManager.ADJUST_LOWER) { |
| 1634 | + if (vibeInSilent || mPrevVolDirection != AudioManager.ADJUST_LOWER) { |
1630 | 1635 | // "silent mode", but which one? |
1631 | | - newRingerMode = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1 |
1632 | | - ? AudioManager.RINGER_MODE_VIBRATE |
1633 | | - : AudioManager.RINGER_MODE_SILENT; |
| 1636 | + newRingerMode = vibeInSilent ? RINGER_MODE_VIBRATE : RINGER_MODE_SILENT; |
1634 | 1637 | } |
1635 | 1638 | if (uiIndex == 0 || (mPrevVolDirection == AudioManager.ADJUST_LOWER && |
1636 | 1639 | mVoiceCapable && streamType == AudioSystem.STREAM_RING)) { |
1637 | 1640 | adjustVolumeIndex = false; |
1638 | 1641 | } |
1639 | 1642 | } |
| 1643 | + } else if (mRingerMode == RINGER_MODE_VIBRATE) { |
| 1644 | + if ((direction == AudioManager.ADJUST_LOWER)) { |
| 1645 | + // Set it to silent, if it wasn't a long-press |
| 1646 | + if (mPrevVolDirection != AudioManager.ADJUST_LOWER) { |
| 1647 | + newRingerMode = RINGER_MODE_SILENT; |
| 1648 | + } |
| 1649 | + } else if (direction == AudioManager.ADJUST_RAISE) { |
| 1650 | + newRingerMode = RINGER_MODE_NORMAL; |
| 1651 | + } |
| 1652 | + adjustVolumeIndex = false; |
1640 | 1653 | } else { |
1641 | 1654 | if (direction == AudioManager.ADJUST_RAISE) { |
1642 | 1655 | // exiting silent mode |
1643 | | - newRingerMode = AudioManager.RINGER_MODE_NORMAL; |
| 1656 | + // If VIBRATE_IN_SILENT, then go into vibrate mode |
| 1657 | + newRingerMode = vibeInSilent ? RINGER_MODE_VIBRATE : RINGER_MODE_NORMAL; |
1644 | 1658 | } |
1645 | 1659 | adjustVolumeIndex = false; |
1646 | 1660 | } |
|
0 commit comments