Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
279 commits
Select commit Hold shift + click to select a range
cab1abe
Translated using Weblate (Polish)
LosstarottArt May 19, 2026
65015a3
Translated using Weblate (Indonesian)
mcikadu-dev May 19, 2026
2566c92
Translated using Weblate (French)
mlep May 19, 2026
c6cb459
fix: fix build and move hasSettings to manifest
KonerDev May 19, 2026
6d071c9
fix: fix build and move hasSettings to manifest (#1383)
KonerDev May 19, 2026
29c9bd3
Translated using Weblate (Chinese (Simplified Han script))
william-pan May 19, 2026
06059a9
Translated using Weblate (Czech)
May 19, 2026
bd42662
Translated using Weblate (German)
KonerDev May 19, 2026
d4e02f1
refactor: refactor dialogs to use Context and update property visibility
KonerDev May 20, 2026
6a651b3
refactor: context for extension API (#1384)
KonerDev May 20, 2026
0c6ca76
Update android.yml
RohitKushvaha01 May 21, 2026
ad06483
Update android.yml
RohitKushvaha01 May 21, 2026
a73bcd6
Update android.yml
RohitKushvaha01 May 21, 2026
48d3ce1
Translated using Weblate (Korean)
Chart-ic May 21, 2026
8f90474
feat: refactor icon handling system to support external resources
KonerDev May 23, 2026
fe2863a
feat: refactor icon handling system (#1388)
KonerDev May 23, 2026
ce3a646
Create verify-translations.yml
RohitKushvaha01 May 23, 2026
c677f7a
Update verify-translations.yml
RohitKushvaha01 May 23, 2026
dda15d2
Update verify-translations.yml
RohitKushvaha01 May 23, 2026
d23ac5b
Update verify-translations.yml
RohitKushvaha01 May 23, 2026
e6f7ec6
Update verify-translations.yml
RohitKushvaha01 May 23, 2026
871d57f
Create scan-translations.js
RohitKushvaha01 May 23, 2026
48f4eb5
Update verify-translations.yml
RohitKushvaha01 May 23, 2026
3c9946c
Update verify-translations.yml
RohitKushvaha01 May 23, 2026
71d339e
Update strings.xml
RohitKushvaha01 May 23, 2026
74b51ef
Fix YAML syntax for translation workflow name
RohitKushvaha01 May 23, 2026
3457800
Update strings.xml
RohitKushvaha01 May 23, 2026
ca2d513
Update Gradle to v9.5.1 (#1390)
renovate[bot] May 23, 2026
5f0f3bc
fix: double free error in terminal
RohitKushvaha01 May 24, 2026
1eb9f5b
Translated using Weblate (Hebrew)
naattxx May 24, 2026
82d50c8
feat: implement extension update support and refactor metadata handling
KonerDev May 26, 2026
480c067
feat: implement extension update support (#1397)
KonerDev May 26, 2026
127569f
test
RohitKushvaha01 May 26, 2026
35656cd
Translated using Weblate (Spanish)
May 26, 2026
7ca2f6e
Refactor XML LSP script and improve extension UI
KonerDev May 26, 2026
b795bd9
fix: refactor XML LSP script and improve extension UI (#1398)
KonerDev May 26, 2026
4571edf
Translated using Weblate (Italian)
May 26, 2026
c63de59
Translated using Weblate (Turkish)
1osurtan May 26, 2026
570e2f4
Translated using Weblate (Indonesian)
cyberboh May 27, 2026
b773504
Update verify-translations.yml
RohitKushvaha01 May 27, 2026
15ea106
Delete verify-translations.yml
RohitKushvaha01 May 27, 2026
acb83a7
Translated using Weblate (French)
May 27, 2026
4767745
feat: unify manifest terminology and improve version compatibility ch…
KonerDev May 27, 2026
ff15c3e
fix: extension compatibility validation logic
KonerDev May 27, 2026
709e60a
feat: unify version terminology (#1401)
KonerDev May 27, 2026
1675e7f
build: bump versionCode to 88
KonerDev May 27, 2026
56443a0
build: bump versionCode to 88 (#1402)
KonerDev May 27, 2026
b63b1dc
Translated using Weblate (Polish)
LosstarottArt May 27, 2026
0511be0
refactor: runner system and definitions
KonerDev May 28, 2026
dc1876d
refactor: documentation links and URL handling
KonerDev May 28, 2026
7f4ab9a
refactor: refactor runner system to improve management and extensibil…
KonerDev May 28, 2026
52b40c4
refactor: runner discovery logic and runner selection UI
KonerDev May 28, 2026
bf6b924
refactor: runner system and definitions (#1404)
KonerDev May 28, 2026
77dbc2f
refactor: refactor dialog and runner APIs to use Activity context
KonerDev May 28, 2026
1a6c4a8
refactor: dialog utility functions and usages
KonerDev May 28, 2026
afbef55
refactor: refactor dialog and runner APIs (#1405)
KonerDev May 28, 2026
c88fbd7
style: auto-format Kotlin with ktfmt
github-actions[bot] May 28, 2026
d09e0f7
Translated using Weblate (French)
mlep May 29, 2026
c3e8d2b
feat: enhance extension framework with context, logging, and scope ma…
KonerDev May 29, 2026
452a7b5
feat: enhance extension context, logging, and scope management (#1406)
KonerDev May 29, 2026
c0cbeb3
Translated using Weblate (German)
KonerDev May 29, 2026
765e7f1
Translated using Weblate (Polish)
LosstarottArt May 29, 2026
5a53d5d
feat: integrate semantic versioning for update logic
KonerDev May 29, 2026
8294414
feat: integrate semantic versioning for update logic (#1407)
KonerDev May 29, 2026
3d3292f
Translated using Weblate (Czech)
May 29, 2026
cdf9404
Translated using Weblate (Turkish)
1osurtan May 29, 2026
b9a9f9a
feat: refactor settings components and overhaul extension management UI
KonerDev May 30, 2026
93137e6
feat: implement extension version warning and uninstall confirmation
KonerDev May 30, 2026
79bef2d
feat: refactor and overhaul extension settings UI (#1408)
KonerDev May 30, 2026
7b747de
Translated using Weblate (Polish)
LosstarottArt May 30, 2026
dbf6e5f
Translated using Weblate (German)
KonerDev May 30, 2026
0de16a6
fix: fix type casting crash and DividerColumn layout crash
KonerDev May 30, 2026
9a60ae9
fix: fix type casting crash and DividerColumn layout crash (#1409)
KonerDev May 30, 2026
55101a6
Translated using Weblate (Bengali)
IonBinTF May 30, 2026
d65db41
fix: handle invalid terminal extra keys and cleanup (Close #1375)
KonerDev May 31, 2026
2942e4a
fix: handle invalid terminal extra keys (Close #1375) (#1410)
KonerDev May 31, 2026
43d32a7
Translated using Weblate (Polish)
LosstarottArt May 31, 2026
b7c34f1
refactor: search architecture and indexing management
KonerDev May 31, 2026
a2e0e46
refactor: search architecture and indexing management (#1411)
KonerDev May 31, 2026
ceea8ac
Translated using Weblate (Italian)
May 31, 2026
abb6a51
Translated using Weblate (French)
mlep May 31, 2026
fba10d7
Translated using Weblate (Turkish)
1osurtan May 31, 2026
6b7602e
feat: add clipboard keybindings for hardware keyboards in terminal (C…
KonerDev May 31, 2026
45ea3fd
Translated using Weblate (Czech)
May 31, 2026
fba09a7
feat: improve LSP log page with proper message sources and filtering
KonerDev May 31, 2026
0b6c9ba
feat: improve LSP log page with enhanced categories (#1413)
KonerDev May 31, 2026
4a6067d
feat: add terminal clipboard keybindings for hardware keyboards (#1414)
KonerDev May 31, 2026
0eae78d
Translated using Weblate (French)
mlep May 31, 2026
fb4e619
Translated using Weblate (Italian)
May 31, 2026
5678f03
Translated using Weblate (Indonesian)
mcikadu-dev Jun 1, 2026
893e202
Translated using Weblate (Polish)
LosstarottArt Jun 1, 2026
fe48a6e
Translated using Weblate (German)
KonerDev Jun 1, 2026
7c15c7d
Translated using Weblate (Turkish)
1osurtan Jun 1, 2026
60fc97c
Translated using Weblate (Persian)
nxrix Jun 2, 2026
68a747f
Update translation files
weblate Jun 2, 2026
2a9a97c
Translated using Weblate (Spanish)
Jun 2, 2026
4c96202
feat: implement formatter management and switch Python LSP to Pyright
KonerDev Jun 2, 2026
6a6fce2
Merge branch 'main' into feat/formatter
KonerDev Jun 2, 2026
331c4cf
feat: implement formatter management and switch Python LSP (#1416)
KonerDev Jun 2, 2026
2d2d572
Translated using Weblate (Italian)
Jun 2, 2026
e7a73bb
Translated using Weblate (Indonesian)
mcikadu-dev Jun 3, 2026
c377609
Translated using Weblate (Polish)
LosstarottArt Jun 3, 2026
f733ab0
Translated using Weblate (French)
mlep Jun 3, 2026
563b3ad
Translated using Weblate (Turkish)
1osurtan Jun 3, 2026
8f147ed
Translated using Weblate (Spanish)
Jun 4, 2026
36d3262
Translated using Weblate (Polish)
LosstarottArt Jun 4, 2026
c25920a
feat: enhancements and numerous tiny issue fixes
KonerDev Jun 7, 2026
72cdf59
feat: enhance `StyledTextField` and update search UI
KonerDev Jun 7, 2026
06ffb70
fix: resolve pattern not set crash (Closes #1420 and closes #1285)
KonerDev Jun 7, 2026
df56751
Translated using Weblate (Korean)
Chart-ic Jun 7, 2026
070af4d
Translated using Weblate (Korean)
Chart-ic Jun 8, 2026
d10aa14
fix: update `launchTerminal` to use `Activity` parameter (Closes #1415)
KonerDev Jun 8, 2026
1ed8860
feat: enhancements and numerous tiny issue fixes (#1426)
KonerDev Jun 8, 2026
a135310
feat: compile proot from source
RohitKushvaha01 Jun 9, 2026
e619dd4
feat: make proot reproducible
RohitKushvaha01 Jun 9, 2026
6e7822c
update soraX
RohitKushvaha01 Jun 9, 2026
1f43c87
fix: build
RohitKushvaha01 Jun 9, 2026
22d2939
fix: build
RohitKushvaha01 Jun 9, 2026
00c0cf5
fix: build for x86_64
RohitKushvaha01 Jun 9, 2026
1a32e53
feat: update to latest sdk version
RohitKushvaha01 Jun 9, 2026
b9eb119
Translated using Weblate (Chinese (Traditional Han script))
ezn24 Jun 9, 2026
d9d4e97
Translated using Weblate (Czech)
Jun 9, 2026
425b4f6
refactor: use `Activity` instead of `Context` in LSP and Runner APIs
KonerDev Jun 9, 2026
fea446f
chore: clean up unused imports and formatting
KonerDev Jun 9, 2026
9f02870
refactor: use `Activity` instead of `Context` in LSP/Runner APIs (#1432)
KonerDev Jun 9, 2026
88af76f
fix: 32bit loader not getting recognised (#1434)
RohitKushvaha01 Jun 9, 2026
2d7ee01
Translated using Weblate (German)
KonerDev Jun 9, 2026
319beab
Translated using Weblate (Vietnamese)
qdyg-vn Jun 9, 2026
9ded22b
Translated using Weblate (Korean)
Chart-ic Jun 9, 2026
0c6bfac
fix: ktfmt
RohitKushvaha01 Jun 10, 2026
f83c9e3
Translated using Weblate (Korean)
Chart-ic Jun 10, 2026
d0bf803
Translated using Weblate (Korean)
Chart-ic Jun 10, 2026
9e4d236
feat: added terminal health checks
RohitKushvaha01 Jun 10, 2026
9e41b79
style: auto-format Kotlin with ktfmt
github-actions[bot] Jun 10, 2026
c89df7c
feat: added fallback for samsung devices #639
RohitKushvaha01 Jun 10, 2026
cc2fede
Translated using Weblate (Korean)
Chart-ic Jun 10, 2026
24fd5f3
feat(extension-api): added api to register custom commands for global…
RohitKushvaha01 Jun 10, 2026
6e3aa65
style: auto-format Kotlin with ktfmt
github-actions[bot] Jun 10, 2026
99dbb13
feat(extension-api): added api to arrange command items of editor too…
RohitKushvaha01 Jun 10, 2026
a0c89c2
feat(extension-api): fixes
RohitKushvaha01 Jun 10, 2026
a90eb35
style: auto-format Kotlin with ktfmt
github-actions[bot] Jun 10, 2026
13e608c
feat(extension-api): decouple mksession from terminal activity
RohitKushvaha01 Jun 10, 2026
e2a04dc
style: auto-format Kotlin with ktfmt
github-actions[bot] Jun 10, 2026
e296a90
feat: bump version
RohitKushvaha01 Jun 10, 2026
6c4df26
Update setup.sh
RohitKushvaha01 Jun 10, 2026
1c5b3f4
chore(android): migrate to AGP 9, align Kotlin toolchain, and moderni…
KonerDev Jun 10, 2026
7dbecf5
Translated using Weblate (Korean)
Chart-ic Jun 11, 2026
7f662cf
Translated using Weblate (Korean)
Chart-ic Jun 11, 2026
10af210
Translated using Weblate (Korean)
Chart-ic Jun 11, 2026
f64252b
Translated using Weblate (Korean)
Chart-ic Jun 11, 2026
822d869
Translated using Weblate (Chinese (Simplified Han script))
william-pan Jun 11, 2026
f840ded
chore: bump versionCode to 94 and cleanup build configurations
KonerDev Jun 11, 2026
4ebb8df
chore: update `soraX` submodule reference
KonerDev Jun 11, 2026
487ca1a
chore(android): migrate to AGP 9 & improve extension APIs (#1439)
KonerDev Jun 11, 2026
ed0fb67
Translated using Weblate (Arabic)
Wadamzmail Jun 12, 2026
595c73d
Translated using Weblate (Korean)
Chart-ic Jun 12, 2026
e11d11d
feat: enhance terminal health diagnostics and localize terminal settings
KonerDev Jun 13, 2026
976e362
feat: enhance terminal health checks (#1446)
KonerDev Jun 13, 2026
96a6224
Translated using Weblate (Korean)
Chart-ic Jun 13, 2026
59aaa21
Translated using Weblate (Czech)
Jun 13, 2026
92ba968
chore: fix string punctuation and PRoot casing in logs
KonerDev Jun 13, 2026
b330e50
chore: fix string punctuation and PRoot casing in logs (#1447)
KonerDev Jun 13, 2026
276f49f
Translated using Weblate (German)
KonerDev Jun 13, 2026
3ab78eb
Translated using Weblate (Turkish)
1osurtan Jun 13, 2026
c11da8d
Translated using Weblate (Indonesian)
mcikadu-dev Jun 13, 2026
8b6265f
Translated using Weblate (French)
mlep Jun 13, 2026
57d21f6
Translated using Weblate (Chinese (Simplified Han script))
Jun 14, 2026
9e2f9f3
added nix syntax support (#1449)
pnthrr Jun 14, 2026
3755868
Create update-soraX.yml
RohitKushvaha01 Jun 14, 2026
c2291e9
chore: update soraX submodule to 2b05794a
github-actions[bot] Jun 14, 2026
8d5f205
Translated using Weblate (Polish)
Jun 14, 2026
f1d2b5a
Translated using Weblate (Italian)
Jun 14, 2026
17846fb
Translated using Weblate (French)
Jun 15, 2026
04e2758
feat: allow terminal with broken setup
RohitKushvaha01 Jun 15, 2026
d6296e2
Translated using Weblate (Czech)
Jun 15, 2026
b9812fd
feat: implement terminal degraded mode and refine feature constraints
KonerDev Jun 15, 2026
6b475e6
feat: implement terminal degraded mode (#1454)
KonerDev Jun 15, 2026
c3b7140
chore: enable immediate exit on error in setup.sh
KonerDev Jun 15, 2026
e646846
chore: enable immediate exit on error in setup.sh (#1455)
KonerDev Jun 15, 2026
c29696e
Translated using Weblate (Italian)
Jun 15, 2026
d6abf8b
Translated using Weblate (French)
mlep Jun 15, 2026
50d3d1a
Translated using Weblate (Indonesian)
mcikadu-dev Jun 16, 2026
9bb7d32
Translated using Weblate (Polish)
Jun 16, 2026
54919c7
Translated using Weblate (Czech)
Jun 16, 2026
5829d6a
Translated using Weblate (Turkish)
1osurtan Jun 16, 2026
e0b81d2
Translated using Weblate (Chinese (Simplified Han script))
Jun 17, 2026
46e90ef
fix: crash when showing toast (Fixes #1438)
RohitKushvaha01 Jun 18, 2026
71e3ce1
fix: duplicate dialogs (Closes #1436)
RohitKushvaha01 Jun 18, 2026
8d2a3d9
fix: Stream get closed prematurely (#981)
RohitKushvaha01 Jun 18, 2026
a8e2774
fix: Explicit termination method 'end' not called (Closes #895)
RohitKushvaha01 Jun 18, 2026
5c231de
fix: Bare Repository has neither a working tree, nor an index (Closes…
RohitKushvaha01 Jun 18, 2026
d2e5e68
fix: Explicit termination method 'close' not called (Closes #1422)
RohitKushvaha01 Jun 18, 2026
4f7fa71
fix: set spacialUse flag for foreground service #1418
RohitKushvaha01 Jun 18, 2026
124ee7f
fix: Replace all text make app not responding (Closes #1355)
RohitKushvaha01 Jun 18, 2026
ea4e8f3
Translated using Weblate (Chinese (Simplified Han script))
william-pan Jun 18, 2026
0be9cd2
feat: enabled r8 shrinking (breaks extensions)
RohitKushvaha01 Jun 18, 2026
224f97a
bump version
RohitKushvaha01 Jun 18, 2026
fc6257a
feat: added dockerfile
RohitKushvaha01 Jun 18, 2026
7710954
fix: disable lsp install prompt if user reject three times
RohitKushvaha01 Jun 18, 2026
d9f5c22
fix: themes
RohitKushvaha01 Jun 18, 2026
6fe3a23
feat(extension): fix UI lag, caching, background loading, and error h…
RohitKushvaha01 Jun 19, 2026
6cbaa02
Clear extension crash disable on uninstall and improve HTTP caching i…
RohitKushvaha01 Jun 19, 2026
578a981
Configure R8 applymapping and automatic mapping copy task for predict…
RohitKushvaha01 Jun 19, 2026
0a8543e
Store and apply R8 mapping file in apk assets to ensure predictable b…
RohitKushvaha01 Jun 19, 2026
05f140a
Configure R8 mapping file location to project root and remove it from…
RohitKushvaha01 Jun 19, 2026
6b2b1c8
Hook mapping copy task to finalize both assembleRelease and bundleRel…
RohitKushvaha01 Jun 19, 2026
0f7a5f3
Translated using Weblate (Italian)
Jun 19, 2026
d4bb3aa
update progurad file
RohitKushvaha01 Jun 19, 2026
b9794cc
fix: okhttp
RohitKushvaha01 Jun 19, 2026
cac9fc4
disable r8 :(
RohitKushvaha01 Jun 19, 2026
8713589
Translated using Weblate (Polish)
Jun 19, 2026
6afdcda
set target SDK version to 34
RohitKushvaha01 Jun 19, 2026
026b60e
feat: added dialog for selecting seccomp modes
RohitKushvaha01 Jun 19, 2026
7cb1eae
Translated using Weblate (Turkish)
1osurtan Jun 19, 2026
536c617
Translated using Weblate (French)
mlep Jun 19, 2026
de1862b
Translated using Weblate (Indonesian)
mcikadu-dev Jun 20, 2026
323621f
feat: added new AndroidProcess in LspConnectionConfig + Removed pytho…
RohitKushvaha01 Jun 20, 2026
e4e721b
Translated using Weblate (Turkish)
1osurtan Jun 20, 2026
16c55af
feat: log rpc messages of lsp when in debug mode
RohitKushvaha01 Jun 21, 2026
c72537f
Translated using Weblate (German)
Atalanttore Jun 21, 2026
206bbc2
Translated using Weblate (French)
mlep Jun 21, 2026
c85ea70
Translated using Weblate (Russian)
KiquarSL Jun 21, 2026
0f1414b
Translated using Weblate (Czech)
Jun 21, 2026
1281fca
feat: added highlighting for .zon file
RohitKushvaha01 Jun 22, 2026
3eee0b5
Translated using Weblate (Polish)
LosstarottArt Jun 22, 2026
055168b
Translated using Weblate (Italian)
Jun 22, 2026
f43edf6
Translated using Weblate (French)
Jun 22, 2026
ab50fd1
fix(proot): loader32
RohitKushvaha01 Jun 22, 2026
883ffb9
fix(proot): disabled mte
RohitKushvaha01 Jun 22, 2026
c3376fd
feat: update target sdk to 37
RohitKushvaha01 Jun 22, 2026
b07a7d7
Translated using Weblate (Chinese (Simplified Han script))
william-pan Jun 22, 2026
8011487
Add kotlinx.coroutines dependency to build.gradle.kts (#1467)
itsvks19 Jun 22, 2026
994c321
feat: refactored extension loading
RohitKushvaha01 Jun 23, 2026
2554b86
Translated using Weblate (Italian)
Jun 23, 2026
2d8da03
Translated using Weblate (Indonesian)
mcikadu-dev Jun 23, 2026
395de6a
Translated using Weblate (French)
mlep Jun 23, 2026
513257a
Translated using Weblate (Polish)
Jun 23, 2026
2593ba6
Update Support.kt
RohitKushvaha01 Jun 23, 2026
5cc8aa5
Update Support.kt
RohitKushvaha01 Jun 23, 2026
3c8c50f
Translated using Weblate (Czech)
Jun 23, 2026
1b43c9f
Translated using Weblate (Italian)
Jun 23, 2026
caa2733
feat: merge themes,iconpacks and extensions on same screen
RohitKushvaha01 Jun 24, 2026
867bebc
feat: improved store ui
RohitKushvaha01 Jun 24, 2026
48d1be2
Translated using Weblate (French)
mlep Jun 24, 2026
57a17ac
Translated using Weblate (Polish)
Jun 24, 2026
61bc8b5
Translated using Weblate (Russian)
KiquarSL Jun 24, 2026
79ee0d6
Translated using Weblate (Indonesian)
mcikadu-dev Jun 24, 2026
b826b5c
Translated using Weblate (French)
mlep Jun 24, 2026
0d5d84d
Translated using Weblate (Turkish)
1osurtan Jun 24, 2026
ebd937d
Translated using Weblate (Korean)
Chart-ic Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 20 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.gradle
.idea
.kotlin
build/
app/build/
core/main/build/
core/components/build/
core/resources/build/
terminal-view/build/
terminal-emulator/build/
soraX/editor/build/
soraX/oniguruma-native/build/
soraX/editor-lsp/build/
soraX/language-textmate/build/
baselineprofile/build/
benchmark/build/
benchmark2/build/
core/proot/build/
local.properties
*.apk
121 changes: 121 additions & 0 deletions .github/scripts/scan-translations.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");
const { GoogleGenerativeAI } = require("@google/generative-ai");

const apiKey = process.env.GEMINI_API_KEY;
if (!apiKey) {
console.error("Missing GEMINI_API_KEY environment variable.");
process.exit(1);
}

const genAI = new GoogleGenerativeAI(apiKey);

// Helper to safely run git commands and get output string
function runGit(command) {
try {
return execSync(command, { encoding: "utf8" }).trim();
} catch (error) {
return "";
}
}

async function main() {
const eventName = process.env.GITHUB_EVENT_NAME;
let baseDiffTarget = "";

if (eventName === "pull_request") {
const baseRef = process.env.GITHUB_BASE_REF;
runGit(`git fetch origin ${baseRef}`);
baseDiffTarget = `origin/${baseRef}...HEAD`;
} else {
let beforeSha = process.env.GITHUB_BEFORE_SHA;
const currentSha = process.env.GITHUB_CURRENT_SHA;

if (!beforeSha || beforeSha === "0000000000000000000000000000000000000000") {
beforeSha = "HEAD~1";
}
baseDiffTarget = `${beforeSha} ${currentSha}`;
}

// 1. Get list of changed files ending with strings.xml
const rawFiles = runGit(`git diff --name-only ${baseDiffTarget}`);
if (!rawFiles) {
console.log("No file changes detected.");
return;
}

const files = rawFiles.split("\n").filter(file => file.endsWith("strings.xml"));

if (files.length === 0) {
console.log("No strings.xml changes detected.");
return;
}

const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash" });
let workflowFailed = false;

// 2. Loop through each modified strings.xml file and scan its diff
for (const file of files) {
const diff = runGit(`git diff ${baseDiffTarget} -- "${file}"`);
if (!diff.trim()) continue;

const prompt = [
"You are a translation moderation system.",
"",
"Analyze this Android strings.xml git diff.",
"",
"Check ONLY newly added or modified translations.",
"",
"Detect:",
"- profanity",
"- slurs",
"- hate speech",
"- sexual content",
"- abusive language",
"- offensive slang",
"",
"Ignore:",
"- XML syntax",
"- placeholders like %s or %d",
"- harmless casual language",
"",
"Reply ONLY with:",
"SAFE",
"",
"or",
"",
"UNSAFE: <reason>",
"",
"Git diff:",
diff
].join("\n");

try {
const result = await model.generateContent(prompt);
const text = result.response.text().trim();

console.log(`\n=== Scanning: ${file} ===`);
console.log(text);

if (!text.startsWith("SAFE")) {
workflowFailed = true;
}
} catch (err) {
console.error(`Error scanning ${file}:`, err.message);
workflowFailed = true;
}
}

if (workflowFailed) {
console.error("\nTranslation moderation failed. Unsafe content detected.");
process.exit(1);
}

console.log("\nAll translations are safe.");
}

main().catch((err) => {
console.error("Execution error:", err);
process.exit(1);
});
9 changes: 6 additions & 3 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ jobs:
java-version: "21"
distribution: "temurin"
cache: gradle

- name: Cache Gradle Build Files
uses: actions/cache@v5
with:
Expand All @@ -52,6 +53,9 @@ jobs:
- name: Clone submodules
run: git submodule update --init --recursive

- name: Accept Android SDK licenses
run: yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses || true

- name: Build with Gradle
run: ./gradlew assembleRelease --no-daemon && mv app/build/outputs/apk/release/*.apk app/xed-editor-${{ env.COMMIT_HASH }}.apk
env:
Expand All @@ -73,12 +77,11 @@ jobs:
env:
COMMIT_MSG: ${{ github.event.head_commit.message }}
run: |
CAPTION=$(printf "%s" "$COMMIT_MSG" | jq -Rs .)
curl -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendDocument" \
-F chat_id="-1002408175863" \
-F message_thread_id="582" \
-F caption="$CAPTION" \
-F document=@"app/xed-editor-${{ env.COMMIT_HASH }}.apk"
-F document=@"app/xed-editor-${{ env.COMMIT_HASH }}.apk" \
--form-string "caption=$COMMIT_MSG"

- name: Generate Plugin Sdk
run: |
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ktfmt-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ jobs:
- name: Clone submodules
run: git submodule update --init --recursive

- name: Accept Android SDK licenses
run: yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses || true

- name: Run ktfmt format
run: ./gradlew ktfmtFormat --no-daemon

Expand Down
33 changes: 33 additions & 0 deletions .github/workflows/update-soraX.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# .github/workflows/update-submodule.yml
name: Update soraX Submodule

on:
workflow_dispatch:

jobs:
update-submodule:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}

- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Update soraX to latest commit
run: |
git submodule update --remote soraX

- name: Commit and push if changed
run: |
git diff --quiet && echo "soraX already up to date, nothing to commit." && exit 0
COMMIT=$(git -C soraX rev-parse --short HEAD)
git add soraX
git commit -m "chore: update soraX submodule to $COMMIT"
git push origin main
15 changes: 14 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,17 @@ Todo.md
*/build
**/build
.vscode
core/wasm3
core/wasm3

# Binary artifacts
*.exe
*.o
*.so
*.a
*.la
*.lo
*.lai
*.pyc
__pycache__/
.DS_Store
*~
63 changes: 63 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# ==========================================
# Stage 1: Build Environment
# ==========================================
FROM eclipse-temurin:21-jdk AS builder

# Set environment variables for Android SDK
ENV ANDROID_HOME=/opt/android-sdk
ENV PATH=${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools

# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
wget \
unzip \
build-essential \
&& rm -rf /var/lib/apt/lists/*

# Download and install Android SDK command-line tools
RUN mkdir -p ${ANDROID_HOME}/cmdline-tools && \
wget -q https://dl.google.com/android/repository/commandlinetools-linux-14742923_latest.zip -O /tmp/cmdline-tools.zip && \
unzip -q /tmp/cmdline-tools.zip -d /tmp && \
mv /tmp/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest && \
rm /tmp/cmdline-tools.zip

# Accept Android SDK licenses
RUN yes | sdkmanager --licenses || true

# Set the working directory
WORKDIR /app

# Copy the project files
# Note: Ensure submodules are checked out on host before building:
# git submodule update --init --recursive
COPY . .

# Set up build arguments for release signing (optional)
# BUILD_TASK can be assembleDebug, assembleRelease, etc.
ARG BUILD_TASK=assembleDebug
ARG RELEASE_KEYSTORE_BASE64=""
ARG RELEASE_PROPERTIES_BASE64=""

# Set env to match the signing logic in app/build.gradle.kts
ENV GITHUB_ACTIONS=true

# Decode credentials (if provided), ensure submodules are present, and run the Gradle build task
RUN if [ -n "$RELEASE_KEYSTORE_BASE64" ] && [ -n "$RELEASE_PROPERTIES_BASE64" ]; then \
echo "Decoding release keys..." && \
echo "$RELEASE_KEYSTORE_BASE64" | base64 -d > /tmp/xed.keystore && \
echo "$RELEASE_PROPERTIES_BASE64" | base64 -d > /tmp/signing.properties; \
fi && \
if [ ! -f soraX/editor/build.gradle.kts ]; then \
echo "soraX submodule not found locally, cloning dynamically..." && \
rm -rf soraX && \
git clone --recursive https://github.com/RohitKushvaha01/soraX.git soraX; \
fi && \
chmod +x gradlew && \
./gradlew ${BUILD_TASK} --no-daemon

# ==========================================
# Stage 2: Export Built APKs (BuildKit friendly)
# ==========================================
FROM scratch AS export-stage
COPY --from=builder /app/app/build/outputs/apk/ /
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,27 @@ documentation: https://xed-editor.github.io/Xed-Docs/

---

## Building the Project


1. Build the **Debug APK** (signed with the included testkey):
```bash
./gradlew assembleDebug
```
The compiled APK will be located at `app/build/outputs/apk/debug/app-debug.apk`.
---

### Option 2: Building with Docker

If you do not have the Android SDK or JDK 21 installed locally, you can compile the project in a container using Docker.
This command builds the APK and exports it directly to your host machine:
```bash
DOCKER_BUILDKIT=1 docker build --target export-stage --output ./out .
```
The output debug APK will be generated at `out/debug/app-debug.apk`.

---

## Contributing

We welcome contributions! Please read the [`/docs/CONTRIBUTING.md`](/docs/CONTRIBUTING.md) file to
Expand Down
3 changes: 3 additions & 0 deletions app/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@
src/main/jniLibs/arm64-v8a/libproot-loader*.so
src/main/jniLibs/armeabi-v7a/libproot-loader*.so
src/main/jniLibs/x86_64/libproot-loader*.so
src/main/jniLibs/arm64-v8a/libloader*.so
src/main/jniLibs/armeabi-v7a/libloader*.so
src/main/jniLibs/x86_64/libloader*.so
16 changes: 8 additions & 8 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,23 @@ import java.util.Properties
plugins {
alias(libs.plugins.android.baselineprofile)
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.ktfmt)
}

android {
namespace = "com.rk.application"
compileSdk = 36
compileSdk = 37

defaultConfig {
applicationId = "com.rk.xededitor"
minSdk = 26

//noinspection ExpiredTargetSdkVersion
targetSdk = 28
targetSdk = 37

// versioning
versionCode = 87
versionName = "3.2.9"
versionCode = 95
versionName = "3.3.1"
vectorDrawables { useSupportLibrary = true }
}

Expand All @@ -40,7 +38,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
kotlin { jvmToolchain(21) }

packaging { jniLibs { useLegacyPackaging = true } }

Expand Down Expand Up @@ -85,9 +82,10 @@ android {
release {
isMinifyEnabled = false
isShrinkResources = false

isCrunchPngs = false

proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")

signingConfig = signingConfigs.getByName("release")
}

Expand All @@ -105,6 +103,8 @@ android {
}
}

kotlin { jvmToolchain(21) }

dependencies {
implementation(libs.androidx.profileinstaller)
coreLibraryDesugaring(libs.desugar)
Expand Down
Loading