aboutsummaryrefslogtreecommitdiff
path: root/car-lib/src/android/car/media
diff options
context:
space:
mode:
authorHongwei Wang <hwwang@google.com>2018-01-30 15:36:05 -0800
committerHongwei Wang <hwwang@google.com>2018-02-06 13:19:30 -0800
commit7aeff99ac51aac29b4dab67426a74b3b558fb4e4 (patch)
treeef3741b359308fae57be511ff707eae918c9ba54 /car-lib/src/android/car/media
parent84dcbfdfb44d0a5eb21851da6566771d665bc737 (diff)
downloadCar-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.java45
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);
}
}