VolumeZen: Introduce internal vs external ringer mode.
Stabilize mapping between ringer-mode=silent and zen=priority by keeping track of two ringer modes: - Internal ringer mode: Used for underlying stream muting - External ringer mode: Reported to clients The mapping between external ringer mode + zen is: - normal = all - vibrate = all - silent = priority (read-write) or none (read) Changes include: - Remove "zen check" from audio service, back to audio service having no knowledge of zen. - Maintain a new external ringer mode in audio service, this is the ringer mode reported through AudioManager to callers, also mapped to the change intent. - Introduce a "ringer mode delegate" to the local audio manager interface, responsible for observing external / internal mode changes, and making changes if necessary. - Internal ringer mode changes are still interesting to the volume dialog, wire up a callback through the existing IVolumeController interface. - On devices without vibration, the mapping is the same but since no ringer mode change is possible, disable the icon toggle and remove the mute icon when volume=0. - On devices with vibration, volume down presses should pulse the vibrate icon (and vibrate) as a hint that this is as low as the device can go using the keys. Since the mechanics are similar to the existing zen=none hint, pull into shared helper. - Log ringer mode changes to the zen log, include calling package information for issue diagnosis. - Include whether vibration is supported in the audio service dump. - Update the status bar icon policy to use the internal ringer mode, not the external mode (for vibrate icon). - Update the "Muted by <x>" logic, include current suppressor in dumpsys, ensure suppression icon is enabled & !clickable, regardless of zen mode. Bug: 17884168 Bug: 15471679 Bug: 16824970 Change-Id: Ia7d3bb23ce6d1e37b24fb6521d1c1ab9bb8f60c0
Loading
Please register or sign in to comment