AudioService: Fix absolute volume for AVRCP

Avrcp.java uses max volume obtained by getStreamMaxVolume() when
converting to AVRCP levels and it returns non-scaled volume index.
For this reason volume index needs to be dispatched to Avrcp before
scaling as otherwise Avrcp will convert volume level incorrectly,
i.e. max volume index for music stream is 15 and any volume index
>1 (>10 after scaling) will result in setting *MAXIMUM* volume level
on headset which is not safe for listener.

Change-Id: Ia799eec578ed2326ec18b69f2ee4f2a60c664514
Audio: Fixed system/call stream volume can't adjust with HS connected.

Issue Description:
When headset connected, the system/voice call stream volume can't be
adjusted from Volume bar.

Root Cause:
Currently adjustStreamVolume is applied to stream type alias and the
device for the stream alias. So when headset connected and adjust
volume for SYSTEM_STREAM, the operation will be applied to RING_STREAM
(which is aliased by SYSTEM_STREAM) and speaker. As headset is returned
from getDeviceForStream(SYSTEM_STREAM), but speaker for RING_STREAM.

Solution:
Change the adjustStreamVolume to apply volume to the stream alias and
the device for the stream type exactly.

Change-Id: Icd226d9eb197017cd3c186a0096edaed755680ec
Signed-off-by: Guo Xie <gxie@marvell.com>
Update for Custom Lockscreen
Don't recreate keyguard for MCC/MNC changes.

Change-Id: I9e5dfdb12df522dc7dd50c26f35aba26b1bbe44e
Keyguard: Fix configuration change observer

Change I9e5dfdb12df522dc7dd50c26f35aba26b1bbe44e made recreations
only happen when a stored copy of the previous configuration differs
from the current one. But "configuration = otherConfiguration" creates
a reference to the original object, not a copy, so newConfig.diff(mLastConfiguration)
always returned zero. Fixit by creating an actual deep copy of the
Configuration object.

Change-Id: I236932dfc0e121dd83212882b4fe71306c8a3fab