Ticket #15110: audio-disable.patch
File audio-disable.patch, 12.5 KB (added by , 8 years ago) |
---|
-
src/org/openstreetmap/josm/actions/audio/AudioBackAction.java
10 10 import java.io.IOException; 11 11 12 12 import org.openstreetmap.josm.Main; 13 import org.openstreetmap.josm.actions.JosmAction;14 13 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 15 14 import org.openstreetmap.josm.io.audio.AudioPlayer; 16 15 import org.openstreetmap.josm.io.audio.AudioUtil; … … 20 19 * Jump the audio backward 10 seconds and start playing if paused. 21 20 * @since 547 22 21 */ 23 public class AudioBackAction extends JosmAction {22 public class AudioBackAction extends BaseAudioAction { 24 23 25 24 /** 26 25 * Constructs a new {@code AudioBackAction}. … … 35 34 public void actionPerformed(ActionEvent e) { 36 35 try { 37 36 if (AudioPlayer.playing() || AudioPlayer.paused()) 38 AudioPlayer.play(AudioPlayer.url() , AudioPlayer.position()37 AudioPlayer.play(AudioPlayer.url().orElse(null), AudioPlayer.position() 39 38 - Main.pref.getDouble("audio.forwardbackamount", 10.0)); 40 39 else 41 40 MarkerLayer.playAudio(); … … 43 42 AudioUtil.audioMalfunction(ex); 44 43 } 45 44 } 46 } 45 } 46 No newline at end of file -
src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
5 5 import java.io.IOException; 6 6 7 7 import org.openstreetmap.josm.Main; 8 import org.openstreetmap.josm.actions.JosmAction;9 8 import org.openstreetmap.josm.io.audio.AudioPlayer; 10 9 import org.openstreetmap.josm.io.audio.AudioUtil; 11 10 import org.openstreetmap.josm.tools.Shortcut; … … 14 13 * Abstract superclass of {@link AudioFasterAction} and {@link AudioSlowerAction}. 15 14 * @since 563 16 15 */ 17 public abstract class AudioFastSlowAction extends JosmAction {16 public abstract class AudioFastSlowAction extends BaseAudioAction { 18 17 19 18 private double multiplier; 20 19 … … 41 40 return; 42 41 try { 43 42 if (AudioPlayer.playing() || AudioPlayer.paused()) 44 AudioPlayer.play(AudioPlayer.url() , AudioPlayer.position(), speed * multiplier);43 AudioPlayer.play(AudioPlayer.url().orElse(null), AudioPlayer.position(), speed * multiplier); 45 44 } catch (IOException | InterruptedException ex) { 46 45 AudioUtil.audioMalfunction(ex); 47 46 } 48 47 } 49 } 48 } 49 No newline at end of file -
src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java
9 9 import java.io.IOException; 10 10 11 11 import org.openstreetmap.josm.Main; 12 import org.openstreetmap.josm.actions.JosmAction;13 12 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 14 13 import org.openstreetmap.josm.io.audio.AudioPlayer; 15 14 import org.openstreetmap.josm.io.audio.AudioUtil; … … 19 18 * Jump the audio forward 10 seconds. 20 19 * @since 547 21 20 */ 22 public class AudioFwdAction extends JosmAction {21 public class AudioFwdAction extends BaseAudioAction { 23 22 24 23 /** 25 24 * Constructs a new {@code AudioFwdAction}. … … 33 32 public void actionPerformed(ActionEvent e) { 34 33 try { 35 34 if (AudioPlayer.playing() || AudioPlayer.paused()) 36 AudioPlayer.play(AudioPlayer.url() , AudioPlayer.position()35 AudioPlayer.play(AudioPlayer.url().orElse(null), AudioPlayer.position() 37 36 + Main.pref.getDouble("audio.forwardbackamount", 10.0)); 38 37 else 39 38 MarkerLayer.playAudio(); … … 41 40 AudioUtil.audioMalfunction(ex); 42 41 } 43 42 } 44 } 43 } 44 No newline at end of file -
src/org/openstreetmap/josm/actions/audio/AudioNextAction.java
7 7 import java.awt.event.ActionEvent; 8 8 import java.awt.event.KeyEvent; 9 9 10 import org.openstreetmap.josm.actions.JosmAction;11 10 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 12 11 import org.openstreetmap.josm.tools.Shortcut; 13 12 … … 16 15 * Play from the first such Marker if none has been played, or repeat the last marker if at the end. 17 16 * @since 547 18 17 */ 19 public class AudioNextAction extends JosmAction {18 public class AudioNextAction extends BaseAudioAction { 20 19 21 20 /** 22 21 * Constructs a new {@code AudioNextAction}. … … 30 29 public void actionPerformed(ActionEvent e) { 31 30 MarkerLayer.playNextMarker(); 32 31 } 33 } 32 } 33 No newline at end of file -
src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java
9 9 import java.io.IOException; 10 10 import java.net.URL; 11 11 12 import org.openstreetmap.josm.actions.JosmAction;13 12 import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker; 14 13 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 15 14 import org.openstreetmap.josm.io.audio.AudioPlayer; … … 23 22 * If fast forwarding or slow forwarding, resume normal speed. 24 23 * @since 547 25 24 */ 26 public class AudioPlayPauseAction extends JosmAction {25 public class AudioPlayPauseAction extends BaseAudioAction { 27 26 28 27 /** 29 28 * Constructs a new {@code AudioPlayPauseAction}. … … 35 34 36 35 @Override 37 36 public void actionPerformed(ActionEvent e) { 38 URL url = AudioPlayer.url() ;37 URL url = AudioPlayer.url().orElse(null); 39 38 try { 40 39 if (url != null && AudioPlayer.paused()) { 41 40 AudioPlayer.play(url); … … 58 57 AudioUtil.audioMalfunction(ex); 59 58 } 60 59 } 61 } 60 } 61 No newline at end of file -
src/org/openstreetmap/josm/actions/audio/AudioPrevAction.java
7 7 import java.awt.event.ActionEvent; 8 8 import java.awt.event.KeyEvent; 9 9 10 import org.openstreetmap.josm.actions.JosmAction;11 10 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 12 11 import org.openstreetmap.josm.tools.Shortcut; 13 12 … … 16 15 * Play from the first such Marker if none has been played or already at the first marker. 17 16 * @since 547 18 17 */ 19 public class AudioPrevAction extends JosmAction {18 public class AudioPrevAction extends BaseAudioAction { 20 19 21 20 /** 22 21 * Constructs a new {@code AudioPrevAction}. … … 30 29 public void actionPerformed(ActionEvent e) { 31 30 MarkerLayer.playPreviousMarker(); 32 31 } 33 } 32 } 33 No newline at end of file -
src/org/openstreetmap/josm/actions/audio/BaseAudioAction.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.actions.audio; 3 4 import org.openstreetmap.josm.Main; 5 import org.openstreetmap.josm.actions.JosmAction; 6 import org.openstreetmap.josm.gui.layer.LayerManager; 7 import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker; 8 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 9 import org.openstreetmap.josm.tools.Shortcut; 10 11 /** 12 * Base class for every action related to audio content. 13 */ 14 public abstract class BaseAudioAction extends JosmAction { 15 16 public BaseAudioAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean registerInToolbar) { 17 super(name, iconName, tooltip, shortcut, registerInToolbar); 18 19 // initial check 20 setEnabled(isAudioMarkerPresent()); 21 22 // reevaluate presence of audio markers each time layouts change 23 Main.getLayerManager().addLayerChangeListener(getLayerChangeListener()); 24 } 25 26 /** 27 * Checks if there is at least one {@link AudioMarker} is present in the current layout. 28 * @return {@code true} if at least one {@link AudioMarker} is present in the current 29 * layout, {@code false} otherwise. 30 */ 31 protected boolean isAudioMarkerPresent() { 32 return Main.getLayerManager().getLayers().stream() 33 .filter(l -> l instanceof MarkerLayer) 34 .map(ml -> (MarkerLayer) ml) 35 .flatMap(ml -> ml.data.stream()) 36 .anyMatch(m -> m instanceof AudioMarker); 37 } 38 39 /** 40 * Creates {@link LayerManager.LayerChangeListener} that disabled/enables the audio 41 * actions depending if there is at least one {@link AudioMarker} present in the 42 * current layout. 43 * @return An instance of {@link LayerManager.LayerChangeListener}. 44 */ 45 private LayerManager.LayerChangeListener getLayerChangeListener() { 46 return new LayerManager.LayerChangeListener() { 47 @Override 48 public void layerAdded(LayerManager.LayerAddEvent e) { 49 setEnabled(isAudioMarkerPresent()); 50 } 51 52 @Override 53 public void layerRemoving(LayerManager.LayerRemoveEvent e) { 54 setEnabled(isAudioMarkerPresent()); 55 } 56 57 @Override 58 public void layerOrderChanged(LayerManager.LayerOrderChangeEvent e) { 59 // nothing 60 } 61 }; 62 } 63 } -
src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
303 303 304 304 // make our new marker 305 305 AudioMarker newAudioMarker = new AudioMarker(coor, 306 null, AudioPlayer.url() , this, time, offset);306 null, AudioPlayer.url().orElse(null), this, time, offset); 307 307 308 308 // insert it at the right place in a copy the collection 309 309 Collection<Marker> newData = new ArrayList<>(); … … 570 570 invalidate(); 571 571 } 572 572 } 573 } 573 } 574 No newline at end of file -
src/org/openstreetmap/josm/io/audio/AudioPlayer.java
3 3 4 4 import java.io.IOException; 5 5 import java.net.URL; 6 import java.util.Optional; 6 7 7 8 import org.openstreetmap.josm.Main; 8 9 import org.openstreetmap.josm.tools.JosmRuntimeException; … … 154 155 155 156 /** 156 157 * To get the Url of the playing or recently played audio. 157 * @return url - could be null158 * @return url The Url of the playing or recently played audio. 158 159 */ 159 public static URLurl() {160 public static Optional<URL> url() { 160 161 AudioPlayer instance = AudioPlayer.getInstance(); 161 return instance == null ? null : instance.playingUrl;162 return Optional.ofNullable(instance == null ? null : instance.playingUrl); 162 163 } 163 164 164 165 /** … … 167 168 */ 168 169 public static boolean paused() { 169 170 AudioPlayer instance = AudioPlayer.getInstance(); 170 return instance == null ? false :(instance.state == State.PAUSED);171 return instance != null && (instance.state == State.PAUSED); 171 172 } 172 173 173 174 /** … … 176 177 */ 177 178 public static boolean playing() { 178 179 AudioPlayer instance = AudioPlayer.getInstance(); 179 return instance == null ? false :(instance.state == State.PLAYING);180 return instance != null && (instance.state == State.PLAYING); 180 181 } 181 182 182 183 /** … … 311 312 public void playing(URL playingURL) { 312 313 this.playingUrl = playingURL; 313 314 } 314 } 315 } 316 No newline at end of file