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:
1 parent
b7e43d7d61
commit
275bee3c11
51 files changed
+704
-372
No files matched your search
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user