Revision: 2951
http://sourceforge.net/p/swingme/code/2951
Author: yuranet
Date: 2025-12-04 18:40:49 +0000 (Thu, 04 Dec 2025)
Log Message:
-----------
better logging for audio errors
Modified Paths:
--------------
AndroidME/build.gradle
AndroidME/src_JSR135_Multimedia/javax/microedition/media/player/AudioPlayer.java
AndroidME/src_MIDP/javax/microedition/media/PlayerListener.java
Added Paths:
-----------
AndroidME/test/
AndroidME/test/javax/
AndroidME/test/javax/microedition/
AndroidME/test/javax/microedition/media/
AndroidME/test/javax/microedition/media/player/
AndroidME/test/javax/microedition/media/player/AudioPlayerTest.java
Modified: AndroidME/build.gradle
===================================================================
--- AndroidME/build.gradle 2025-11-30 17:01:55 UTC (rev 2950)
+++ AndroidME/build.gradle 2025-12-04 18:40:49 UTC (rev 2951)
@@ -31,6 +31,7 @@
encoding = 'cp1252'
}
// updating to 35 may require a update of the gradle plugin!!
+ // 31+ does not support gradle 6 at all, ONLY gradle 4 and 7+ is supported!
compileSdkVersion 34
buildToolsVersion '34.0.0'
@@ -40,16 +41,31 @@
java.srcDirs = ['src_Android','src_JSR120_SMS','src_JSR135_Multimedia','src_JSR179_Location','src_JSR184_3D','src_JSR234_Advanced_Multimedia','src_JSR82_Bluetooth','src_MIDP','src_SwingME_plaf']
res.srcDirs = ['res']
}
+ test {
+ java.srcDirs = ['test']
+ }
}
defaultConfig {
minSdkVersion 4
}
+ packagingOptions {
+ exclude 'META-INF/LICENSE.md'
+ exclude 'META-INF/LICENSE-notice.md'
+ }
}
dependencies {
api project(":SwingME")
+
+ // 5.11.4 is the last version that works with gradle 4
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4'
}
+tasks.withType(Test).configureEach {
+ useJUnitPlatform()
+}
+
group = 'org.swingme'
version = '1.0.0'
Modified: AndroidME/src_JSR135_Multimedia/javax/microedition/media/player/AudioPlayer.java
===================================================================
--- AndroidME/src_JSR135_Multimedia/javax/microedition/media/player/AudioPlayer.java 2025-11-30 17:01:55 UTC (rev 2950)
+++ AndroidME/src_JSR135_Multimedia/javax/microedition/media/player/AudioPlayer.java 2025-12-04 18:40:49 UTC (rev 2951)
@@ -1,10 +1,13 @@
package javax.microedition.media.player;
import android.content.res.AssetFileDescriptor;
+import android.media.AudioTrack;
import android.media.MediaPlayer;
import net.yura.android.AndroidMeApp;
import net.yura.mobile.logging.Logger;
import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import javax.microedition.media.Control;
@@ -48,6 +51,19 @@
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
+
+ try {
+ String whatString = findConstantsByValueAndPrefix(MediaPlayer.class, "MEDIA_ERROR_", what);
+ String extraString = findConstantsByValueAndPrefix(MediaPlayer.class, "MEDIA_ERROR_", extra);
+ if (extraString == null) {
+ extraString = findConstantsByValueAndPrefix(AudioTrack.class, "ERROR_", extra);
+ }
+ System.out.println("AudioPlayer onError what " + whatString + " (" + what + ") extra " + extraString + " (" + extra + ")");
+ }
+ catch (Throwable ex) {
+ System.out.println("unable to print error string" + ex);
+ }
+
sendListenerEvent(PlayerListener.ERROR, what + " " + extra);
return false;
}
@@ -153,4 +169,26 @@
//return player.getTrackInfo()[0].getFormat().getString(MediaFormat.KEY_MIME);
return null;
}
+
+ public static String findConstantsByValueAndPrefix(Class<?> clazz, String prefix, int value) {
+ Field[] fields = clazz.getDeclaredFields();
+
+ for (Field field : fields) {
+ try {
+ if (Modifier.isStatic(field.getModifiers())
+ && Modifier.isFinal(field.getModifiers())
+ && field.getType() == int.class
+ && field.getName().startsWith(prefix)) {
+
+ field.setAccessible(true);
+ if (field.getInt(null) == value) {
+ return field.getName();
+ }
+ }
+ }
+ catch (Exception e) { }
+ }
+
+ return null;
+ }
}
Modified: AndroidME/src_MIDP/javax/microedition/media/PlayerListener.java
===================================================================
--- AndroidME/src_MIDP/javax/microedition/media/PlayerListener.java 2025-11-30 17:01:55 UTC (rev 2950)
+++ AndroidME/src_MIDP/javax/microedition/media/PlayerListener.java 2025-12-04 18:40:49 UTC (rev 2951)
@@ -10,6 +10,10 @@
* When looping: An END_OF_MEDIA event will be posted every time the Player reaches the end of media.
*/
static String END_OF_MEDIA = "endOfMedia";
+ /**
+ * it is common for eventData to be a String with a numerical error code.
+ * on Android its a string with 2 ints separated by a space
+ */
static String ERROR = "error";
static String STARTED = "started";
static String STOPPED = "stopped";
Added: AndroidME/test/javax/microedition/media/player/AudioPlayerTest.java
===================================================================
--- AndroidME/test/javax/microedition/media/player/AudioPlayerTest.java (rev 0)
+++ AndroidME/test/javax/microedition/media/player/AudioPlayerTest.java 2025-12-04 18:40:49 UTC (rev 2951)
@@ -0,0 +1,22 @@
+package javax.microedition.media.player;
+
+import android.media.MediaPlayer;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @see AudioPlayer
+ */
+public class AudioPlayerTest {
+
+ @Test
+ public void findConstantsByValueAndPrefix() {
+
+ String error = AudioPlayer.findConstantsByValueAndPrefix(MediaPlayer.class, "MEDIA_ERROR_", 1);
+ assertEquals("MEDIA_ERROR_UNKNOWN", error);
+
+ String error2 = AudioPlayer.findConstantsByValueAndPrefix(MediaPlayer.class, "MEDIA_ERROR_", -19);
+ assertEquals(null, error2);
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|