diff options
author | Scott Jackson <daneren2005@gmail.com> | 2013-02-07 19:13:08 -0800 |
---|---|---|
committer | Scott Jackson <daneren2005@gmail.com> | 2013-02-07 19:13:08 -0800 |
commit | 6612b1049231374d69d4cdd3fe9b52571048cda1 (patch) | |
tree | 5e1a520a8826a9e135232c43fc1d2acb45d79cba /subsonic-android/src | |
parent | ef9ce9a9c7984ab9b34e826132f4a2e21ada98f9 (diff) | |
download | dsub-6612b1049231374d69d4cdd3fe9b52571048cda1.tar.gz dsub-6612b1049231374d69d4cdd3fe9b52571048cda1.tar.bz2 dsub-6612b1049231374d69d4cdd3fe9b52571048cda1.zip |
Release the visualizer object when not being used
Diffstat (limited to 'subsonic-android/src')
3 files changed, 30 insertions, 7 deletions
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java index f6017a54..05591818 100644 --- a/subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java +++ b/subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java @@ -285,9 +285,14 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi public void onClick(View view) { boolean active = !visualizerView.isActive(); visualizerView.setActive(active); - getDownloadService().setShowVisualization(visualizerView.isActive()); + boolean isActive = visualizerView.isActive(); + getDownloadService().setShowVisualization(isActive); updateButtons(); - Util.toast(DownloadActivity.this, active ? R.string.download_visualizer_on : R.string.download_visualizer_off); + if(active == isActive) { + Util.toast(DownloadActivity.this, active ? R.string.download_visualizer_on : R.string.download_visualizer_off); + } else { + Util.toast(DownloadActivity.this, "Failed to start visualizer. Try restarting."); + } setControlsVisible(true); } }); diff --git a/subsonic-android/src/github/daneren2005/dsub/audiofx/VisualizerController.java b/subsonic-android/src/github/daneren2005/dsub/audiofx/VisualizerController.java index dc46ee18..b32245f4 100644 --- a/subsonic-android/src/github/daneren2005/dsub/audiofx/VisualizerController.java +++ b/subsonic-android/src/github/daneren2005/dsub/audiofx/VisualizerController.java @@ -36,6 +36,8 @@ public class VisualizerController { private final Context context; private Visualizer visualizer; + private boolean released = false; + private int audioSessionId = 0; // Class initialization fails when this throws an exception. static { @@ -54,10 +56,10 @@ public class VisualizerController { } public VisualizerController(Context context, MediaPlayer mediaPlayer) { - Log.d(TAG, "Setting up visualizer"); this.context = context; try { - visualizer = new Visualizer(mediaPlayer.getAudioSessionId()); + audioSessionId = mediaPlayer.getAudioSessionId(); + visualizer = new Visualizer(audioSessionId); } catch (Throwable x) { Log.w(TAG, "Failed to create visualizer.", x); } @@ -81,10 +83,21 @@ public class VisualizerController { public void release() { if (isAvailable()) { visualizer.release(); + released = true; } } public Visualizer getVisualizer() { + if(released) { + released = false; + try { + visualizer = new Visualizer(audioSessionId); + } catch (Throwable x) { + visualizer = null; + Log.w(TAG, "Failed to create visualizer.", x); + } + } + return visualizer; } } diff --git a/subsonic-android/src/github/daneren2005/dsub/view/VisualizerView.java b/subsonic-android/src/github/daneren2005/dsub/view/VisualizerView.java index 19097885..53ebc2ec 100644 --- a/subsonic-android/src/github/daneren2005/dsub/view/VisualizerView.java +++ b/subsonic-android/src/github/daneren2005/dsub/view/VisualizerView.java @@ -61,8 +61,10 @@ public class VisualizerView extends View { public void setActive(boolean active) { this.active = active; - Visualizer visualizer = getVizualiser(); + VisualizerController visualizerController = getVizualiser(); + Visualizer visualizer = visualizerController == null ? null : visualizerController.getVisualizer(); if (visualizer == null) { + this.active = false; return; } @@ -83,13 +85,16 @@ public class VisualizerView extends View { } visualizer.setEnabled(active); + if(!active) { + visualizerController.release(); + } invalidate(); } - private Visualizer getVizualiser() { + private VisualizerController getVizualiser() { DownloadService downloadService = DownloadServiceImpl.getInstance(); VisualizerController visualizerController = downloadService == null ? null : downloadService.getVisualizerController(); - return visualizerController == null ? null : visualizerController.getVisualizer(); + return visualizerController; } private void updateVisualizer(byte[] waveform) { |