diff options
| author | ezio84 <brabus84@gmail.com> | 2018-11-13 22:54:14 +0100 |
|---|---|---|
| committer | ezio84 <brabus84@gmail.com> | 2018-11-13 22:54:14 +0100 |
| commit | 9bc2002a3caa1f077852828b57dc6e446bd9eddd (patch) | |
| tree | 11ac8fa570a0cdb6fe204bf7d3bd233b71d29e77 /src/com | |
| parent | 28e9597a9f69cbf0401f35e474e058c632d5fb8e (diff) | |
when unlocking it's better to follow what Google does in Statusbar,
offloading expensive operations from the main ui thread
Diffstat (limited to 'src/com')
| -rw-r--r-- | src/com/android/systemui/pulse/VisualizerStreamHandler.java | 84 |
1 files changed, 46 insertions, 38 deletions
diff --git a/src/com/android/systemui/pulse/VisualizerStreamHandler.java b/src/com/android/systemui/pulse/VisualizerStreamHandler.java index 7122627..cce27d7 100644 --- a/src/com/android/systemui/pulse/VisualizerStreamHandler.java +++ b/src/com/android/systemui/pulse/VisualizerStreamHandler.java @@ -28,6 +28,9 @@ import android.os.Handler; import android.os.Message; import android.util.Log; +import com.android.systemui.Dependency; +import com.android.systemui.UiOffloadThread; + public class VisualizerStreamHandler { public interface Listener { public void onStreamAnalyzed(boolean isValid); @@ -60,6 +63,8 @@ public class VisualizerStreamHandler { protected PulseController mController; protected Listener mListener; + private final UiOffloadThread mUiOffloadThread; + private Handler mHandler = new Handler() { @Override public void handleMessage(Message m) { @@ -85,6 +90,7 @@ public class VisualizerStreamHandler { mContext = context; mController = controller; mListener = listener; + mUiOffloadThread = Dependency.get(UiOffloadThread.class); } /** @@ -93,52 +99,54 @@ public class VisualizerStreamHandler { * @param player - MediaPlayer instance to link to */ public final void link(int audioSessionId) { - if (mVisualizer != null && audioSessionId != mAudioSessionId) { - mVisualizer.setEnabled(false); - mVisualizer.release(); - mVisualizer = null; - } - pause(); - resetAnalyzer(); - mAudioSessionId = audioSessionId; - - if (mVisualizer == null) { - try { - mVisualizer = new Visualizer(audioSessionId); - } catch (Exception e) { - Log.e(TAG, "Error enabling visualizer!", e); - return; + mUiOffloadThread.submit(() -> { + if (mVisualizer != null && audioSessionId != mAudioSessionId) { + mVisualizer.setEnabled(false); + mVisualizer.release(); + mVisualizer = null; } - mVisualizer.setEnabled(false); - mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); + pause(); + resetAnalyzer(); + mAudioSessionId = audioSessionId; + + if (mVisualizer == null) { + try { + mVisualizer = new Visualizer(audioSessionId); + } catch (Exception e) { + Log.e(TAG, "Error enabling visualizer!", e); + return; + } + mVisualizer.setEnabled(false); + mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); + + Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() { + @Override + public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, + int samplingRate) { + if (ENABLE_WAVEFORM) { + analyze(bytes); + if (isValidStream() && !mIsPaused) { + mListener.onWaveFormUpdate(bytes); + } + } + } - Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() { - @Override - public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, - int samplingRate) { - if (ENABLE_WAVEFORM) { + @Override + public void onFftDataCapture(Visualizer visualizer, byte[] bytes, + int samplingRate) { analyze(bytes); if (isValidStream() && !mIsPaused) { - mListener.onWaveFormUpdate(bytes); + mListener.onFFTUpdate(bytes); } } - } + }; - @Override - public void onFftDataCapture(Visualizer visualizer, byte[] bytes, - int samplingRate) { - analyze(bytes); - if (isValidStream() && !mIsPaused) { - mListener.onFFTUpdate(bytes); - } - } - }; - - mVisualizer.setDataCaptureListener(captureListener, - (int) (Visualizer.getMaxCaptureRate() * 0.75), ENABLE_WAVEFORM, true); + mVisualizer.setDataCaptureListener(captureListener, + (int) (Visualizer.getMaxCaptureRate() * 0.75), ENABLE_WAVEFORM, true); - } - mVisualizer.setEnabled(true); + } + mVisualizer.setEnabled(true); + }); } public final void unlink() { |
