diff --git a/README.md b/README.md index cd35411..7d3a8e5 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,10 @@ repositories { mavenCentral() } dependencies{ - implementation("io.github.selemba1000:JavaMediaTranportControls:0.0.1") + implementation("io.github.selemba1000:JavaMediaTranportControls:0.0.2") } ``` -Current version is 0.0.1. +Current version is 0.0.2. #### Maven Local Download this repository via git with: ```bash diff --git a/src/main/java/io/github/selemba1000/JMTC.java b/src/main/java/io/github/selemba1000/JMTC.java index 5133be3..42ada3e 100644 --- a/src/main/java/io/github/selemba1000/JMTC.java +++ b/src/main/java/io/github/selemba1000/JMTC.java @@ -3,10 +3,19 @@ import io.github.selemba1000.linux.LinuxJMTC; import io.github.selemba1000.windows.WindowsJMTC; +/** + * This singleton is the entrypoint to the library. Use getInstance to access the functions of the library + */ public abstract class JMTC { + /** + * Instance reference to implement singleton pattern + */ protected static JMTC INSTANCE; + /** + * Internal constructor to implement singleton pattern. + */ protected JMTC() { } diff --git a/src/main/java/io/github/selemba1000/JMTCButtonCallback.java b/src/main/java/io/github/selemba1000/JMTCButtonCallback.java index 4c6aa7a..8e8859d 100644 --- a/src/main/java/io/github/selemba1000/JMTCButtonCallback.java +++ b/src/main/java/io/github/selemba1000/JMTCButtonCallback.java @@ -2,7 +2,11 @@ /** * Interface for callback function for Buttons. + * Can be set as Lambda function. */ public interface JMTCButtonCallback { + /** + * Callback function. + */ void callback(); } diff --git a/src/main/java/io/github/selemba1000/JMTCCallbacks.java b/src/main/java/io/github/selemba1000/JMTCCallbacks.java index 002413d..ca9c1b1 100644 --- a/src/main/java/io/github/selemba1000/JMTCCallbacks.java +++ b/src/main/java/io/github/selemba1000/JMTCCallbacks.java @@ -5,6 +5,12 @@ */ @SuppressWarnings("CanBeFinal") public class JMTCCallbacks { + /** + * Creates an empty instance to be filled by property access + */ + public JMTCCallbacks() { + } + /** * Callback for when Play button is pressed in UI or as MediaKey. */ diff --git a/src/main/java/io/github/selemba1000/JMTCMediaProperties.java b/src/main/java/io/github/selemba1000/JMTCMediaProperties.java index dd51748..e3b64af 100644 --- a/src/main/java/io/github/selemba1000/JMTCMediaProperties.java +++ b/src/main/java/io/github/selemba1000/JMTCMediaProperties.java @@ -4,4 +4,8 @@ * Abstract class for media properties. Not in Use currently. */ public abstract class JMTCMediaProperties { + /** + * Create empty instance. Not used directly as class is abstract. + */ + public JMTCMediaProperties(){} } diff --git a/src/main/java/io/github/selemba1000/JMTCMediaType.java b/src/main/java/io/github/selemba1000/JMTCMediaType.java index fe890f7..0a25df6 100644 --- a/src/main/java/io/github/selemba1000/JMTCMediaType.java +++ b/src/main/java/io/github/selemba1000/JMTCMediaType.java @@ -5,5 +5,8 @@ * Currently only Music is supported. */ public enum JMTCMediaType { + /** + * Currently the only supported media type + */ Music, } diff --git a/src/main/java/io/github/selemba1000/JMTCParameters.java b/src/main/java/io/github/selemba1000/JMTCParameters.java index ff448d4..72efda0 100644 --- a/src/main/java/io/github/selemba1000/JMTCParameters.java +++ b/src/main/java/io/github/selemba1000/JMTCParameters.java @@ -54,8 +54,17 @@ public JMTCParameters(LoopStatus loopStatus, Double volume, Double rate, Boolean * Track = Loop current Track */ public enum LoopStatus { + /** + * Repeat nothing. Stop after last Song + */ None, + /** + * Repeat the Playlist after the last song + */ Playlist, + /** + * Repeat only the currently playing track + */ Track } } diff --git a/src/main/java/io/github/selemba1000/JMTCPlayingState.java b/src/main/java/io/github/selemba1000/JMTCPlayingState.java index 2afc0fc..1a46afa 100644 --- a/src/main/java/io/github/selemba1000/JMTCPlayingState.java +++ b/src/main/java/io/github/selemba1000/JMTCPlayingState.java @@ -14,10 +14,24 @@ * Changing = the player is changing the file. Windows only */ public enum JMTCPlayingState { + /** + * Media is currently playing + */ PLAYING, + /** + * Media is currently paused + */ PAUSED, + /** + * Media is stopped. Usually when media was selected, but not started. + */ STOPPED, + /** + * Currently no media loaded. + */ CLOSED, + /** + * The Media is currently changing/loading. + */ CHANGING, - } diff --git a/src/main/java/io/github/selemba1000/JMTCSeekCallback.java b/src/main/java/io/github/selemba1000/JMTCSeekCallback.java index 81368fb..1c45f9d 100644 --- a/src/main/java/io/github/selemba1000/JMTCSeekCallback.java +++ b/src/main/java/io/github/selemba1000/JMTCSeekCallback.java @@ -4,5 +4,9 @@ * Interface for seek lambda callback. */ public interface JMTCSeekCallback { + /** + * The callback function. + * @param position The position that was seeked to in ms. + */ void callback(Long position); } diff --git a/src/main/java/io/github/selemba1000/JMTCValueChangedCallback.java b/src/main/java/io/github/selemba1000/JMTCValueChangedCallback.java index 1e697a5..038b464 100644 --- a/src/main/java/io/github/selemba1000/JMTCValueChangedCallback.java +++ b/src/main/java/io/github/selemba1000/JMTCValueChangedCallback.java @@ -2,9 +2,14 @@ /** * Interface for callback when value of property changes. + * @param the Type of value that changed */ public interface JMTCValueChangedCallback { + /** + * Callback for when property changes + * @param property the property that changed + */ void callback(T property); } diff --git a/src/main/java/io/github/selemba1000/linux/LinuxJMTC.java b/src/main/java/io/github/selemba1000/linux/LinuxJMTC.java index 8867f45..9d76054 100644 --- a/src/main/java/io/github/selemba1000/linux/LinuxJMTC.java +++ b/src/main/java/io/github/selemba1000/linux/LinuxJMTC.java @@ -13,6 +13,9 @@ import java.util.Map; import java.util.Objects; +/** + * Central class for all Linux related interfacing. + */ public class LinuxJMTC extends JMTC implements MPRISPlayer2, MPRISPlayer2Player, Properties { private static final String generalInterface = "org.mpris.MediaPlayer2"; @@ -65,13 +68,24 @@ public class LinuxJMTC extends JMTC implements MPRISPlayer2, MPRISPlayer2Player, final SignaledDBusProperty CanSeek = new SignaledDBusProperty<>(true, "CanSeek", getObjectPath(), playerInterface); @SuppressWarnings("unused") final DBusProperty CanControl = new DBusProperty<>(true, "CanControl"); + /** + * Internal reference to all callbacks. + */ protected JMTCCallbacks callbacks; + /** + * Internal reference to the dbus connection. + */ private DBusConnection connection; private Boolean enabled = false; private String playerName; + /** + * Constructor to set up JMTC for Linux + * @param playerName a unique name for this instance + * @param desktopFile the desktop file of the app without the extension + */ public LinuxJMTC(String playerName, String desktopFile) { try { this.playerName = playerName; diff --git a/src/main/java/io/github/selemba1000/linux/MPRISPlayer2.java b/src/main/java/io/github/selemba1000/linux/MPRISPlayer2.java index def8b09..19987af 100644 --- a/src/main/java/io/github/selemba1000/linux/MPRISPlayer2.java +++ b/src/main/java/io/github/selemba1000/linux/MPRISPlayer2.java @@ -5,6 +5,9 @@ import org.freedesktop.dbus.annotations.DBusProperty.Access; import org.freedesktop.dbus.interfaces.DBusInterface; +/** + * Representation for the MPRIS2 MadiaPlayer DBus Interface + */ @DBusInterfaceName("org.mpris.MediaPlayer2") @DBusProperty(name = "Identity", type = String.class, access = Access.READ) @DBusProperty(name = "DesktopEntry", type = String.class, access = Access.READ) @@ -17,8 +20,14 @@ @DBusProperty(name = "CanRaise", type = Boolean.class, access = Access.READ) public interface MPRISPlayer2 extends DBusInterface { + /** + * Request to raise the program to the foreground. + */ void Raise(); + /** + * Request to quit the program. + */ void Quit(); } diff --git a/src/main/java/io/github/selemba1000/linux/MPRISPlayer2Player.java b/src/main/java/io/github/selemba1000/linux/MPRISPlayer2Player.java index ef5b6cf..c1ca9c5 100644 --- a/src/main/java/io/github/selemba1000/linux/MPRISPlayer2Player.java +++ b/src/main/java/io/github/selemba1000/linux/MPRISPlayer2Player.java @@ -11,6 +11,9 @@ import java.util.Map; +/** + * DBus reference for MPRIS Player + */ @DBusInterfaceName("org.mpris.MediaPlayer2.Player") @DBusProperty(name = "Metadata", type = Map.class, access = Access.READ) @DBusProperty(name = "PlaybackStatus", type = String.class, access = Access.READ) @@ -27,43 +30,102 @@ @DBusProperty(name = "CanSeek", type = Boolean.class, access = Access.READ) public interface MPRISPlayer2Player extends DBusInterface { + /** + * Skip to the track before the currently playing one. + */ @SuppressWarnings("unused") void Previous(); + /** + * Skip to the Song after the currently playing one. + */ @SuppressWarnings("unused") void Next(); + /** + * Stop playback. + */ @SuppressWarnings("unused") void Stop(); + /** + * Start playback. + */ @SuppressWarnings("unused") void Play(); + /** + * Pause playback. + */ @SuppressWarnings("unused") void Pause(); + /** + * Start and stop playback. Stop if currently playing. Start if currently paused. + */ @SuppressWarnings("unused") void PlayPause(); + /** + * Seek to specified position. + * + * @param _arg0 position to seek to + */ @SuppressWarnings("unused") void Seek(long _arg0); + /** + * Open and play the specified uri. + * + * @param _arg0 The uri to play + */ @SuppressWarnings("unused") void OpenUri(String _arg0); + /** + * Jump to the specified Position in the specified song. + * + * @param _arg0 Song specified by path + * @param _arg1 Position to jump to + */ @SuppressWarnings("unused") void SetPosition(DBusPath _arg0, long _arg1); + /** + * Enum for the Loop status conversions. + */ enum LoopStatus { + /** + * No repeating. + */ None("None"), + /** + * Repeat the current Track. + */ Track("Track"), + /** + * Repeat the current playlist + */ Playlist("Playlist"); + + /** + * THe string representation of the status. + */ public final String value; + /** + * Set a loop status via string representation + * @param value + */ LoopStatus(String value) { this.value = value; } + /** + * Convert generalised status to linux specific version. + * @param status The general status to be converted + * @return The corresponding linux status + */ static LoopStatus fromInner(JMTCParameters.LoopStatus status) { switch (status) { case None: @@ -77,6 +139,10 @@ static LoopStatus fromInner(JMTCParameters.LoopStatus status) { } } + /** + * Convert this status to the generalised version. + * @return Generalised status + */ JMTCParameters.LoopStatus toOuter() { switch (this) { case None: @@ -91,15 +157,28 @@ JMTCParameters.LoopStatus toOuter() { } + /** + * The DBusSignal emitted by using the seek feature. + */ @SuppressWarnings("unused") class Seeked extends DBusSignal { private final long timeInUs; + /** + * THe constructor to create the Seeked signal, + * @param _path the path to the relevant track + * @param _timeInUs the time in us to seek + * @throws DBusException if DBus is not working properly + */ public Seeked(String _path, long _timeInUs) throws DBusException { super(_path); timeInUs = _timeInUs; } + /** + * Getter for the seeked time. + * @return The seeked TIme + */ public long getTimeInUs() { return timeInUs; } diff --git a/src/main/java/io/github/selemba1000/windows/ButtonPressedCallback.java b/src/main/java/io/github/selemba1000/windows/ButtonPressedCallback.java index 09a6016..5023da2 100644 --- a/src/main/java/io/github/selemba1000/windows/ButtonPressedCallback.java +++ b/src/main/java/io/github/selemba1000/windows/ButtonPressedCallback.java @@ -3,14 +3,27 @@ import com.sun.jna.Callback; import io.github.selemba1000.JMTCButtonCallback; +/** + * Interface for callbacks executed by ButtonPresses + */ public class ButtonPressedCallback implements Callback { + /** + * Callback delegate to avoid empty callbacks + */ private final JMTCButtonCallback callbackDel; + /** + * Constructor to set the callback + * @param callback Callback to be set + */ protected ButtonPressedCallback(JMTCButtonCallback callback) { this.callbackDel = callback; } + /** + * The Callback + */ @SuppressWarnings("unused") public void callback() { if (callbackDel != null) { diff --git a/src/main/java/io/github/selemba1000/windows/LoopStatusCallback.java b/src/main/java/io/github/selemba1000/windows/LoopStatusCallback.java index d65e711..648e66b 100644 --- a/src/main/java/io/github/selemba1000/windows/LoopStatusCallback.java +++ b/src/main/java/io/github/selemba1000/windows/LoopStatusCallback.java @@ -4,14 +4,25 @@ import io.github.selemba1000.JMTCParameters; import io.github.selemba1000.JMTCValueChangedCallback; +/** + * The callback for when the Loop option is pressed in UI. + */ public class LoopStatusCallback implements Callback { private final JMTCValueChangedCallback callbackDel; + /** + * Constructor that sets the callback. + * @param callback The callback to be set + */ LoopStatusCallback(JMTCValueChangedCallback callback){ this.callbackDel = callback; } + /** + * The callback function. + * @param loop the requested loop status + */ public void callback(UnsignedInt loop){ if(callbackDel!=null) { switch (loop.intValue()) { diff --git a/src/main/java/io/github/selemba1000/windows/RateCallback.java b/src/main/java/io/github/selemba1000/windows/RateCallback.java index b69f3b5..cab88da 100644 --- a/src/main/java/io/github/selemba1000/windows/RateCallback.java +++ b/src/main/java/io/github/selemba1000/windows/RateCallback.java @@ -3,14 +3,25 @@ import com.sun.jna.Callback; import io.github.selemba1000.JMTCValueChangedCallback; +/** + * The callback for when the rate button is pressed in UI. + */ public class RateCallback implements Callback { private final JMTCValueChangedCallback callbackDel; + /** + * Constructor that sets the callback. + * @param callback The callback to be set + */ RateCallback(JMTCValueChangedCallback callback){ this.callbackDel = callback; } + /** + * The callback function. + * @param value the requested playback rate + */ public void callback(Double value){ if (callbackDel!=null){ callbackDel.callback(value); diff --git a/src/main/java/io/github/selemba1000/windows/SMTCAdapter.java b/src/main/java/io/github/selemba1000/windows/SMTCAdapter.java index 5721d16..a290864 100644 --- a/src/main/java/io/github/selemba1000/windows/SMTCAdapter.java +++ b/src/main/java/io/github/selemba1000/windows/SMTCAdapter.java @@ -3,6 +3,9 @@ import com.sun.jna.Library; import com.sun.jna.WString; +/** + * The interface definition for JNA. + */ public interface SMTCAdapter extends Library { void init(); diff --git a/src/main/java/io/github/selemba1000/windows/SeekCallback.java b/src/main/java/io/github/selemba1000/windows/SeekCallback.java index 9026126..f4b8c01 100644 --- a/src/main/java/io/github/selemba1000/windows/SeekCallback.java +++ b/src/main/java/io/github/selemba1000/windows/SeekCallback.java @@ -3,14 +3,25 @@ import com.sun.jna.Callback; import io.github.selemba1000.JMTCSeekCallback; +/** + * The callback for when the seekbar in UI is used. + */ public class SeekCallback implements Callback { private final JMTCSeekCallback callbackDel; + /** + * Constructor that set the callback + * @param callback The callback to set + */ protected SeekCallback(JMTCSeekCallback callback) { this.callbackDel = callback; } + /** + * The callback function. + * @param position the requested seek position + */ @SuppressWarnings("unused") public void callback(Long position) { if (callbackDel != null) { diff --git a/src/main/java/io/github/selemba1000/windows/ShuffleCallback.java b/src/main/java/io/github/selemba1000/windows/ShuffleCallback.java index c28fe87..ac5bccb 100644 --- a/src/main/java/io/github/selemba1000/windows/ShuffleCallback.java +++ b/src/main/java/io/github/selemba1000/windows/ShuffleCallback.java @@ -3,14 +3,25 @@ import com.sun.jna.Callback; import io.github.selemba1000.JMTCValueChangedCallback; +/** + * The callback for when the shuffle button is pressed in UI + */ public class ShuffleCallback implements Callback { private final JMTCValueChangedCallback callbackDel; + /** + * Constructor that sets the callback + * @param callback The callback to be set + */ ShuffleCallback(JMTCValueChangedCallback callback){ this.callbackDel = callback; } + /** + * The callback function. + * @param value the requested shuffle setting + */ public void callback(Boolean value){ if(callbackDel!=null){ callbackDel.callback(value); diff --git a/src/main/java/io/github/selemba1000/windows/UnsignedInt.java b/src/main/java/io/github/selemba1000/windows/UnsignedInt.java index 663d4ae..67efed2 100644 --- a/src/main/java/io/github/selemba1000/windows/UnsignedInt.java +++ b/src/main/java/io/github/selemba1000/windows/UnsignedInt.java @@ -2,12 +2,22 @@ import com.sun.jna.IntegerType; +/** + * Class to represent unsigned integers correctly. + */ public class UnsignedInt extends IntegerType { + /** + * Constructor for unsigned 0 int + */ @SuppressWarnings("unused") public UnsignedInt() { super(4, true); } + /** + * Constructor for unsigned int with value. + * @param value the value of the int + */ UnsignedInt(int value) { super(4, value, true); } diff --git a/src/main/java/io/github/selemba1000/windows/WindowsJMTC.java b/src/main/java/io/github/selemba1000/windows/WindowsJMTC.java index 176b91d..1e0f75b 100644 --- a/src/main/java/io/github/selemba1000/windows/WindowsJMTC.java +++ b/src/main/java/io/github/selemba1000/windows/WindowsJMTC.java @@ -1,19 +1,25 @@ package io.github.selemba1000.windows; import com.sun.jna.Native; -import com.sun.jna.Pointer; import com.sun.jna.WString; import io.github.selemba1000.*; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; +/** + * The class that contains the Windows implementation + */ public class WindowsJMTC extends JMTC { - public final SMTCAdapter lib; + /** + * The Internal reference to the native library + */ + protected final SMTCAdapter lib; + /** + * Constructor to set up JMTC for Windows. + */ public WindowsJMTC() { super(); lib = Native.load("SMTCAdapter", SMTCAdapter.class);