MiniABS 1.2: Galician interface, larger text and touch targets

- Translate the interface to Galician (tools/translate_gl.py), including
  Galician month abbreviations for dates, which Android 2.3 lacks
- Resize for the Galaxy Mini's 240x320 screen: larger text, rows, tabs and
  buttons; all sizes now live in res/values/dimens.xml
- Redraw play/pause/refresh icons for every density; slightly brighter
  secondary text colours

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xockoandClaude Opus 5.5 committed 2026-10-14 21:29:17 +02:00
1 parent b7e43d7d61
commit 275bee3c11
51 files changed
+704 -372

No files matched your search

+22 -22
View File
@@ -256,7 +256,7 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
}
lastPosMs = positionMs();
state = PAUSED;
status = "Paused";
status = "En pausa";
pausedAt = SystemClock.elapsedRealtime();
syncNow(false);
wifi.release();
@@ -345,7 +345,7 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
markFinished();
releasePlayer();
state = ENDED;
status = "Marked as played";
status = "Marcado como escoitado";
lastPosMs = dur;
pausedAt = SystemClock.elapsedRealtime();
wifi.release();
@@ -364,7 +364,7 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
private void open(final Episode e, final double startSec, boolean playNow) {
releasePlayer();
state = LOADING;
status = "Connecting…";
status = "Conectando…";
playOnPrepared = playNow;
showNotification(true);
final int gen = ++generation;
@@ -407,9 +407,9 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
JSONObject t = tracks == null ? null : tracks.optJSONObject(0);
String cu = t == null ? "" : Util.str(t, "contentUrl");
if (cu.length() == 0) {
s.error = "The server sent no audio for this episode.";
s.error = "O servidor non enviou audio para este episodio.";
} else if (cu.contains(".m3u8")) {
s.error = "This episode needs transcoding, which Android 2.x can't play. Try downloading it.";
s.error = "Este episodio precisa transcodificación, que Android 2.x non pode reproducir. Proba a descargalo.";
} else {
s.contentUrl = cu;
s.url = streamUrl(c, cu);
@@ -442,7 +442,7 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
local = s.local;
resumeMs = (int) (s.start * 1000);
lastPosMs = resumeMs;
prepare(s.url, s.offline ? "Offline · progress will sync later" : null);
prepare(s.url, s.offline ? "Sen conexión · o progreso sincronizarase despois" : null);
}
private void prepare(String url, String note) {
@@ -467,10 +467,10 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
wifi.acquire();
}
state = LOADING;
status = note != null ? note : local ? "Opening saved file…" : "Buffering…";
status = note != null ? note : local ? "Abrindo o ficheiro gardado…" : "Cargando…";
mp.prepareAsync();
} catch (Exception ex) {
fail("Can't open the audio: " + Util.describe(ex));
fail("Non se pode abrir o audio: " + Util.describe(ex));
}
}
@@ -490,7 +490,7 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
start();
} else {
state = PAUSED;
status = "Paused";
status = "En pausa";
showNotification(false);
}
}
@@ -506,12 +506,12 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
mp.setVolume(1f, 1f);
mp.start();
} catch (Exception ex) {
fail("Playback failed: " + Util.describe(ex));
fail("Fallou a reprodución: " + Util.describe(ex));
return;
}
if (!local) wifi.acquire();
state = PLAYING;
status = local ? (sessionId == null ? "Saved file · offline" : "Saved file") : "Streaming";
status = local ? (sessionId == null ? "Ficheiro gardado · sen conexión" : "Ficheiro gardado") : "Reproducindo en liña";
playingSince = SystemClock.elapsedRealtime();
lastTick = playingSince;
if (lastSync == 0) lastSync = playingSince;
@@ -555,11 +555,11 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
// Old Android's streamer "completes" when the connection drops. Treat that as an error.
if (!local && dur > 0 && pos < dur - 30000) {
lastPosMs = pos;
retryStream("Connection lost, reconnecting…");
retryStream("Perdeuse a conexión, reconectando…");
return;
}
state = ENDED;
status = "Finished";
status = "Rematado";
lastPosMs = dur;
pausedAt = SystemClock.elapsedRealtime();
wifi.release();
@@ -573,9 +573,9 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
if (p != mp) return true;
if (prepared) lastPosMs = positionMs();
if (!local && contentUrl != null) {
retryStream("Connection lost, reconnecting…");
retryStream("Perdeuse a conexión, reconectando…");
} else {
fail("Playback error (" + what + "/" + extra + ").");
fail("Erro de reprodución (" + what + "/" + extra + ").");
}
return true;
}
@@ -583,7 +583,7 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
/** Re-opens the stream at the last position with a fresh token. Gives up after three tries. */
private void retryStream(final String msg) {
if (retries >= 3 || contentUrl == null) {
fail("Lost connection to the server. Press play to try again.");
fail("Perdeuse a conexión co servidor. Preme reproducir para tentalo de novo.");
retries = 0;
return;
}
@@ -675,7 +675,7 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
if (sleepAt > 0 && now >= sleepAt) {
sleepAt = 0;
pause();
status = "Sleep timer: paused";
status = "Temporizador: en pausa";
}
} else if (state == PAUSED || state == ENDED || state == ERROR) {
// Free the phone's memory if left paused for a long time.
@@ -756,11 +756,11 @@ public class PlayerService extends Service implements MediaPlayer.OnPreparedList
PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
String what;
switch (state) {
case PLAYING: what = "Playing"; break;
case LOADING: what = "Loading…"; break;
case ENDED: what = "Finished"; break;
case ERROR: what = "Stopped: tap to retry"; break;
default: what = "Paused"; break;
case PLAYING: what = "Reproducindo"; break;
case LOADING: what = "Cargando…"; break;
case ENDED: what = "Rematado"; break;
case ERROR: what = "Detido: toca para tentalo de novo"; break;
default: what = "En pausa"; break;
}
n.setLatestEventInfo(this, ep.title, Util.join(what, ep.show), pi);
if (foreground) {