diff options
author | Hongwei Wang <hwwang@google.com> | 2018-01-30 15:36:05 -0800 |
---|---|---|
committer | Hongwei Wang <hwwang@google.com> | 2018-02-06 13:19:30 -0800 |
commit | 7aeff99ac51aac29b4dab67426a74b3b558fb4e4 (patch) | |
tree | ef3741b359308fae57be511ff707eae918c9ba54 /car-lib/src/android/car/media | |
parent | 84dcbfdfb44d0a5eb21851da6566771d665bc737 (diff) | |
download | Car-7aeff99ac51aac29b4dab67426a74b3b558fb4e4.tar.gz |
Persist the usage volume settings
The current volume index per usage is stored in Settings.Global.
A settings application written for a car would register ContentObserver
to receive callbacks and update the UI accordingly.
Bug: 72746096
Test: Tested w/ Car Settings App on emulator
Change-Id: If92277fdd6907e2d29fd8d97f5ef5ade3686517b
Diffstat (limited to 'car-lib/src/android/car/media')
-rw-r--r-- | car-lib/src/android/car/media/CarAudioManager.java | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/car-lib/src/android/car/media/CarAudioManager.java b/car-lib/src/android/car/media/CarAudioManager.java index 1cdc0bfbb2..f04003202d 100644 --- a/car-lib/src/android/car/media/CarAudioManager.java +++ b/car-lib/src/android/car/media/CarAudioManager.java @@ -15,15 +15,19 @@ */ package android.car.media; +import android.annotation.NonNull; import android.annotation.SystemApi; import android.car.CarLibLog; import android.car.CarManagerBase; import android.car.CarNotConnectedException; +import android.content.ContentResolver; import android.content.Context; +import android.database.ContentObserver; import android.media.AudioAttributes; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; +import android.provider.Settings; import android.util.Log; /** @@ -31,9 +35,46 @@ import android.util.Log; */ public final class CarAudioManager implements CarManagerBase { + // The trailing slash forms a directory-liked hierarchy and + // allows listening for both VOLUME/MEDIA and VOLUME/NAVIGATION. + private static final String VOLUME_SETTINGS_KEY_URI_PREFIX = "android.car.VOLUME/"; + + /** + * @param busNumber The physical bus address number + * @return Key to persist volume index in {@link Settings.Global} + */ + public static String getVolumeSettingsKeyForBus(int busNumber) { + return VOLUME_SETTINGS_KEY_URI_PREFIX + busNumber; + } + + private final ContentResolver mContentResolver; private final ICarAudio mService; /** + * Registers a {@link ContentObserver} to listen for audio usage volume changes. + * + * {@link ContentObserver#onChange(boolean)} will be called on every audio usage volume change. + * + * @param observer The {@link ContentObserver} instance to register, non-null + */ + @SystemApi + public void registerVolumeChangeObserver(@NonNull ContentObserver observer) { + mContentResolver.registerContentObserver( + Settings.Global.getUriFor(VOLUME_SETTINGS_KEY_URI_PREFIX), + true, observer); + } + + /** + * Unregisters the {@link ContentObserver} which listens for audio usage volume changes. + * + * @param observer The {@link ContentObserver} instance to unregister, non-null + */ + @SystemApi + public void unregisterVolumeChangeObserver(@NonNull ContentObserver observer) { + mContentResolver.unregisterContentObserver(observer); + } + + /** * Sets the volume index for an {@link AudioAttributes} usage. * * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission. @@ -45,8 +86,7 @@ public final class CarAudioManager implements CarManagerBase { * {@link android.media.AudioManager#FLAG_PLAY_SOUND}) */ @SystemApi - public void setUsageVolume( - @AudioAttributes.AttributeUsage int usage, int index, int flags) + public void setUsageVolume(@AudioAttributes.AttributeUsage int usage, int index, int flags) throws CarNotConnectedException { try { mService.setUsageVolume(usage, index, flags); @@ -238,6 +278,7 @@ public final class CarAudioManager implements CarManagerBase { /** @hide */ public CarAudioManager(IBinder service, Context context, Handler handler) { + mContentResolver = context.getContentResolver(); mService = ICarAudio.Stub.asInterface(service); } } |