summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/AudioManager.java40
-rw-r--r--media/java/android/media/AudioPortEventHandler.java140
2 files changed, 91 insertions, 89 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 360f764ace7c..67c05520bad8 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -65,7 +65,7 @@ public class AudioManager {
private final boolean mUseFixedVolume;
private final Binder mToken = new Binder();
private static String TAG = "AudioManager";
- AudioPortEventHandler mAudioPortEventHandler;
+ private static final AudioPortEventHandler sAudioPortEventHandler = new AudioPortEventHandler();
/**
* Broadcast intent, a hint for applications that audio is about to become
@@ -646,9 +646,9 @@ public class AudioManager {
com.android.internal.R.bool.config_useMasterVolume);
mUseVolumeKeySounds = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_useVolumeKeySounds);
- mAudioPortEventHandler = new AudioPortEventHandler(this);
mUseFixedVolume = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_useFixedVolume);
+ sAudioPortEventHandler.init();
}
private static IAudioService getService()
@@ -3607,7 +3607,7 @@ public class AudioManager {
* @hide
*/
public void registerAudioPortUpdateListener(OnAudioPortUpdateListener l) {
- mAudioPortEventHandler.registerListener(l);
+ sAudioPortEventHandler.registerListener(l);
}
/**
@@ -3615,7 +3615,7 @@ public class AudioManager {
* @hide
*/
public void unregisterAudioPortUpdateListener(OnAudioPortUpdateListener l) {
- mAudioPortEventHandler.unregisterListener(l);
+ sAudioPortEventHandler.unregisterListener(l);
}
//
@@ -3623,23 +3623,23 @@ public class AudioManager {
//
static final int AUDIOPORT_GENERATION_INIT = 0;
- Integer mAudioPortGeneration = new Integer(AUDIOPORT_GENERATION_INIT);
- ArrayList<AudioPort> mAudioPortsCached = new ArrayList<AudioPort>();
- ArrayList<AudioPatch> mAudioPatchesCached = new ArrayList<AudioPatch>();
+ static Integer sAudioPortGeneration = new Integer(AUDIOPORT_GENERATION_INIT);
+ static ArrayList<AudioPort> sAudioPortsCached = new ArrayList<AudioPort>();
+ static ArrayList<AudioPatch> sAudioPatchesCached = new ArrayList<AudioPatch>();
- int resetAudioPortGeneration() {
+ static int resetAudioPortGeneration() {
int generation;
- synchronized (mAudioPortGeneration) {
- generation = mAudioPortGeneration;
- mAudioPortGeneration = AUDIOPORT_GENERATION_INIT;
+ synchronized (sAudioPortGeneration) {
+ generation = sAudioPortGeneration;
+ sAudioPortGeneration = AUDIOPORT_GENERATION_INIT;
}
return generation;
}
- int updateAudioPortCache(ArrayList<AudioPort> ports, ArrayList<AudioPatch> patches) {
- synchronized (mAudioPortGeneration) {
+ static int updateAudioPortCache(ArrayList<AudioPort> ports, ArrayList<AudioPatch> patches) {
+ synchronized (sAudioPortGeneration) {
- if (mAudioPortGeneration == AUDIOPORT_GENERATION_INIT) {
+ if (sAudioPortGeneration == AUDIOPORT_GENERATION_INIT) {
int[] patchGeneration = new int[1];
int[] portGeneration = new int[1];
int status;
@@ -3678,23 +3678,23 @@ public class AudioManager {
}
}
- mAudioPortsCached = newPorts;
- mAudioPatchesCached = newPatches;
- mAudioPortGeneration = portGeneration[0];
+ sAudioPortsCached = newPorts;
+ sAudioPatchesCached = newPatches;
+ sAudioPortGeneration = portGeneration[0];
}
if (ports != null) {
ports.clear();
- ports.addAll(mAudioPortsCached);
+ ports.addAll(sAudioPortsCached);
}
if (patches != null) {
patches.clear();
- patches.addAll(mAudioPatchesCached);
+ patches.addAll(sAudioPatchesCached);
}
}
return SUCCESS;
}
- AudioPortConfig updatePortConfig(AudioPortConfig portCfg, ArrayList<AudioPort> ports) {
+ static AudioPortConfig updatePortConfig(AudioPortConfig portCfg, ArrayList<AudioPort> ports) {
AudioPort port = portCfg.port();
int k;
for (k = 0; k < ports.size(); k++) {
diff --git a/media/java/android/media/AudioPortEventHandler.java b/media/java/android/media/AudioPortEventHandler.java
index 9db49949baf9..ba2a59d0e301 100644
--- a/media/java/android/media/AudioPortEventHandler.java
+++ b/media/java/android/media/AudioPortEventHandler.java
@@ -31,94 +31,96 @@ import java.lang.ref.WeakReference;
*/
class AudioPortEventHandler {
- private final Handler mHandler;
- private ArrayList<AudioManager.OnAudioPortUpdateListener> mListeners;
- private AudioManager mAudioManager;
+ private Handler mHandler;
+ private final ArrayList<AudioManager.OnAudioPortUpdateListener> mListeners =
+ new ArrayList<AudioManager.OnAudioPortUpdateListener>();
- private static String TAG = "AudioPortEventHandler";
+ private static final String TAG = "AudioPortEventHandler";
private static final int AUDIOPORT_EVENT_PORT_LIST_UPDATED = 1;
private static final int AUDIOPORT_EVENT_PATCH_LIST_UPDATED = 2;
private static final int AUDIOPORT_EVENT_SERVICE_DIED = 3;
private static final int AUDIOPORT_EVENT_NEW_LISTENER = 4;
- AudioPortEventHandler(AudioManager audioManager) {
- mAudioManager = audioManager;
- mListeners = new ArrayList<AudioManager.OnAudioPortUpdateListener>();
-
- // find the looper for our new event handler
- Looper looper = Looper.getMainLooper();
-
- if (looper != null) {
- mHandler = new Handler(looper) {
- @Override
- public void handleMessage(Message msg) {
- ArrayList<AudioManager.OnAudioPortUpdateListener> listeners;
- synchronized (this) {
- if (msg.what == AUDIOPORT_EVENT_NEW_LISTENER) {
- listeners = new ArrayList<AudioManager.OnAudioPortUpdateListener>();
- if (mListeners.contains(msg.obj)) {
- listeners.add((AudioManager.OnAudioPortUpdateListener)msg.obj);
+ void init() {
+ synchronized (this) {
+ if (mHandler != null) {
+ return;
+ }
+ // find the looper for our new event handler
+ Looper looper = Looper.getMainLooper();
+
+ if (looper != null) {
+ mHandler = new Handler(looper) {
+ @Override
+ public void handleMessage(Message msg) {
+ ArrayList<AudioManager.OnAudioPortUpdateListener> listeners;
+ synchronized (this) {
+ if (msg.what == AUDIOPORT_EVENT_NEW_LISTENER) {
+ listeners = new ArrayList<AudioManager.OnAudioPortUpdateListener>();
+ if (mListeners.contains(msg.obj)) {
+ listeners.add((AudioManager.OnAudioPortUpdateListener)msg.obj);
+ }
+ } else {
+ listeners = mListeners;
}
- } else {
- listeners = mListeners;
}
- }
- if (listeners.isEmpty()) {
- return;
- }
- // reset audio port cache if the event corresponds to a change coming
- // from audio policy service or if mediaserver process died.
- if (msg.what == AUDIOPORT_EVENT_PORT_LIST_UPDATED ||
- msg.what == AUDIOPORT_EVENT_PATCH_LIST_UPDATED ||
- msg.what == AUDIOPORT_EVENT_SERVICE_DIED) {
- mAudioManager.resetAudioPortGeneration();
- }
- ArrayList<AudioPort> ports = new ArrayList<AudioPort>();
- ArrayList<AudioPatch> patches = new ArrayList<AudioPatch>();
- if (msg.what != AUDIOPORT_EVENT_SERVICE_DIED) {
- int status = mAudioManager.updateAudioPortCache(ports, patches);
- if (status != AudioManager.SUCCESS) {
+ if (listeners.isEmpty()) {
return;
}
- }
-
- switch (msg.what) {
- case AUDIOPORT_EVENT_NEW_LISTENER:
- case AUDIOPORT_EVENT_PORT_LIST_UPDATED:
- AudioPort[] portList = ports.toArray(new AudioPort[0]);
- for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onAudioPortListUpdate(portList);
+ // reset audio port cache if the event corresponds to a change coming
+ // from audio policy service or if mediaserver process died.
+ if (msg.what == AUDIOPORT_EVENT_PORT_LIST_UPDATED ||
+ msg.what == AUDIOPORT_EVENT_PATCH_LIST_UPDATED ||
+ msg.what == AUDIOPORT_EVENT_SERVICE_DIED) {
+ AudioManager.resetAudioPortGeneration();
}
- if (msg.what == AUDIOPORT_EVENT_PORT_LIST_UPDATED) {
- break;
+ ArrayList<AudioPort> ports = new ArrayList<AudioPort>();
+ ArrayList<AudioPatch> patches = new ArrayList<AudioPatch>();
+ if (msg.what != AUDIOPORT_EVENT_SERVICE_DIED) {
+ int status = AudioManager.updateAudioPortCache(ports, patches);
+ if (status != AudioManager.SUCCESS) {
+ return;
+ }
}
- // FALL THROUGH
- case AUDIOPORT_EVENT_PATCH_LIST_UPDATED:
- AudioPatch[] patchList = patches.toArray(new AudioPatch[0]);
- for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onAudioPatchListUpdate(patchList);
- }
- break;
+ switch (msg.what) {
+ case AUDIOPORT_EVENT_NEW_LISTENER:
+ case AUDIOPORT_EVENT_PORT_LIST_UPDATED:
+ AudioPort[] portList = ports.toArray(new AudioPort[0]);
+ for (int i = 0; i < listeners.size(); i++) {
+ listeners.get(i).onAudioPortListUpdate(portList);
+ }
+ if (msg.what == AUDIOPORT_EVENT_PORT_LIST_UPDATED) {
+ break;
+ }
+ // FALL THROUGH
- case AUDIOPORT_EVENT_SERVICE_DIED:
- for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onServiceDied();
- }
- break;
+ case AUDIOPORT_EVENT_PATCH_LIST_UPDATED:
+ AudioPatch[] patchList = patches.toArray(new AudioPatch[0]);
+ for (int i = 0; i < listeners.size(); i++) {
+ listeners.get(i).onAudioPatchListUpdate(patchList);
+ }
+ break;
+
+ case AUDIOPORT_EVENT_SERVICE_DIED:
+ for (int i = 0; i < listeners.size(); i++) {
+ listeners.get(i).onServiceDied();
+ }
+ break;
- default:
- break;
+ default:
+ break;
+ }
}
- }
- };
- } else {
- mHandler = null;
+ };
+ native_setup(new WeakReference<AudioPortEventHandler>(this));
+ } else {
+ mHandler = null;
+ }
}
-
- native_setup(new WeakReference<AudioPortEventHandler>(this));
}
+
private native void native_setup(Object module_this);
@Override