2 Commits
Author SHA1 Message Date
XoséandClaude Opus 5.5 82acdb79f6 Calendar Lite 1.6: English month and weekday names in English mode
They came from the phone's locale, so a phone set to Spanish showed "Octubre 2026" with an
English interface (and I18nTest failed on any machine not set to English).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 19:11:24 +02:00
XoséandClaude Opus 5.5 478fc60527 README: direct https (no Pangolin needed), APK size, Bouncy Castle sources, test command
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 18:40:21 +02:00
4 changed files with 11 additions and 9 deletions

No files matched your search

+2 -2
View File
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.gingercal" package="org.gingercal"
android:versionCode="6" android:versionCode="7"
android:versionName="1.5"> android:versionName="1.6">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" /> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" />
+7 -5
View File
@@ -1,7 +1,7 @@
# Calendar Lite — Nextcloud CalDAV for Android 2.3 (Galaxy Mini) # Calendar Lite — Nextcloud CalDAV for Android 2.3 (Galaxy Mini)
A small native calendar client for Gingerbread (API 9/10). Built for a Samsung Galaxy Mini A small native calendar client for Gingerbread (API 9/10). Built for a Samsung Galaxy Mini
(GT-S5570, 240×320, Android 2.3.5) talking to Nextcloud, reached through Pangolin. (GT-S5570, 240×320, Android 2.3.5) talking to Nextcloud at its normal `https://` address.
**Since 1.4 it brings its own TLS 1.2** (Bouncy Castle, the same client as Plexamp Lite, with Mozilla's **Since 1.4 it brings its own TLS 1.2** (Bouncy Castle, the same client as Plexamp Lite, with Mozilla's
root certificates and keep-alive connections), like the iPod version does with BearSSL. Put the root certificates and keep-alive connections), like the iPod version does with BearSSL. Put the
@@ -139,14 +139,16 @@ you should turn `proxy_ssl_verify` on.
Menu key: View (Month/Agenda), New event, Sync, Today, Calendars, Settings. Tap an event for Menu key: View (Month/Agenda), New event, Sync, Today, Calendars, Settings. Tap an event for
details, Edit and Delete. details, Edit and Delete.
If installation fails, check the file arrived whole (53 KB; some browsers save a truncated or If installation fails, check the file arrived whole (about 1 MB; some browsers save a truncated or
renamed `.apk.zip`) and that there are a few MB free on the internal storage. On a PC with renamed `.apk.zip`) and that there are a few MB free on the internal storage. On a PC with
`adb`, `adb install CalendarLite.apk` prints the exact reason (`INSTALL_FAILED_...`). `adb`, `adb install CalendarLite.apk` prints the exact reason (`INSTALL_FAILED_...`).
## Building ## Building
Needs JDK 11+, Python 3, `d8` and `apksigner.jar` (Android SDK build-tools), and Needs JDK 11+, Python 3, `d8` and `apksigner.jar` (Android SDK build-tools),
`apktool.jar` (2.9+, which bundles Google's `aapt` and smali). No Gradle. `apktool.jar` (2.9+, which bundles Google's `aapt` and smali), and the Bouncy Castle sources renamed
to `com.minamp.bc` that Plexamp Lite's `tools/setup_toolchain.sh` prepares (`BC_SRC`, default
`~/android-toolchain/bcsrc`). No Gradle.
```sh ```sh
D8=d8 APKTOOL=~/apktool.jar APKSIGNER=$SDK/build-tools/34.0.0/lib/apksigner.jar ./build.sh D8=d8 APKTOOL=~/apktool.jar APKSIGNER=$SDK/build-tools/34.0.0/lib/apksigner.jar ./build.sh
@@ -165,7 +167,7 @@ over the existing app.
Tests (desktop JVM, need a CalDAV server such as Radicale on :5232 with user `xose`/`secret`): Tests (desktop JVM, need a CalDAV server such as Radicale on :5232 with user `xose`/`secret`):
```sh ```sh
javac -d out src/org/gingercal/*.java test/org/gingercal/*.java javac -d out src/org/gingercal/*.java $(ls test/org/gingercal/*.java | grep -v NetTest)
java -cp out org.gingercal.CoreTest # discovery, sync, recurrence, create/edit/delete java -cp out org.gingercal.CoreTest # discovery, sync, recurrence, create/edit/delete
java -cp out org.gingercal.RedirectTest # redirect handling (no server needed) java -cp out org.gingercal.RedirectTest # redirect handling (no server needed)
# the bundled TLS transport (needs the android.jar and Bouncy Castle sources to compile): # the bundled TLS transport (needs the android.jar and Bouncy Castle sources to compile):
+1 -1
View File
@@ -9,7 +9,7 @@ public class GingerApp extends Application {
super.onCreate(); super.onCreate();
L.gl = !"en".equals(getSharedPreferences("gingercal", 0).getString("lang", "gl")); L.gl = !"en".equals(getSharedPreferences("gingercal", 0).getString("lang", "gl"));
org.gingercal.net.CertVerifier.setRootStore(new org.gingercal.net.AssetRoots(this)); org.gingercal.net.CertVerifier.setRootStore(new org.gingercal.net.AssetRoots(this));
org.gingercal.net.Http.USER_AGENT = "CalendarLite/1.5 (Android 2.3)"; org.gingercal.net.Http.USER_AGENT = "CalendarLite/1.6 (Android 2.3)";
tlsTexts(); tlsTexts();
} }
+1 -1
View File
@@ -42,7 +42,7 @@ public final class L {
static final String[] GL_DAYS_SHORT = {"", "dom", "lun", "mar", "mér", "xov", "ven", "sáb"}; static final String[] GL_DAYS_SHORT = {"", "dom", "lun", "mar", "mér", "xov", "ven", "sáb"};
public static DateFormatSymbols symbols() { public static DateFormatSymbols symbols() {
if (!gl) return new DateFormatSymbols(Locale.getDefault()); if (!gl) return new DateFormatSymbols(Locale.US); // English names, whatever the phone's language
DateFormatSymbols s = new DateFormatSymbols(Locale.US); DateFormatSymbols s = new DateFormatSymbols(Locale.US);
s.setMonths(GL_MONTHS); s.setMonths(GL_MONTHS);
s.setShortMonths(GL_MONTHS_SHORT); s.setShortMonths(GL_MONTHS_SHORT);