Compare commits

...

2 Commits

Author SHA1 Message Date
GitHub Actions
e88bebad3d chore: bump version to 4.11.77 [skip ci] 2026-04-07 07:13:09 +00:00
a0eb652098 Add new 64x64 icon image in PNG format
All checks were successful
Build / increment-version (push) Successful in 6s
Build / build-android (push) Successful in 4m16s
Build / create-release (push) Successful in 8s
2026-04-07 17:12:59 +10:00
31 changed files with 65 additions and 6501 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="ic_launcher_background">#FFFFFF</color> <color name="ic_launcher_background">#00000000</color>
</resources> </resources>

BIN
icons/1024x1024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
icons/128x128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
icons/16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
icons/24x24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
icons/256x256.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
icons/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
icons/48x48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
icons/512x512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

BIN
icons/64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 138 KiB

View File

@@ -3,5 +3,6 @@
"url": "http://synbox.ruv.wtf:8418/litruv/cinny-mobile", "url": "http://synbox.ruv.wtf:8418/litruv/cinny-mobile",
"author": "litruv", "author": "litruv",
"name": "Paarrot", "name": "Paarrot",
"overrideSource": "Forgejo (Codeberg)",
"additionalSettings": "{\"apkFilterRegEx\":\"Paarrot\\\\.apk\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"releaseIdSkipPatterns\":[],\"sortMethodChoice\":0}" "additionalSettings": "{\"apkFilterRegEx\":\"Paarrot\\\\.apk\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"releaseIdSkipPatterns\":[],\"sortMethodChoice\":0}"
} }

6503
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "paarrot", "name": "paarrot",
"version": "4.11.76", "version": "4.11.77",
"description": "Paarrot - A Matrix client based on Cinny", "description": "Paarrot - A Matrix client based on Cinny",
"engines": { "engines": {
"node": ">=18.0.0" "node": ">=18.0.0"

View File

@@ -49,6 +49,56 @@ async function generateElectronIcons() {
console.log('Generated: icon.icns'); console.log('Generated: icon.icns');
} }
/**
* Android adaptive icon density configs.
* Foreground canvas = 108dp equivalent. Safe zone = center 72dp (66.7%).
* Legacy launcher icon = 48dp equivalent.
* @type {Array<{density: string, foregroundSize: number, launcherSize: number}>}
*/
const androidDensities = [
{ density: 'mipmap-mdpi', foregroundSize: 108, launcherSize: 48 },
{ density: 'mipmap-hdpi', foregroundSize: 162, launcherSize: 72 },
{ density: 'mipmap-xhdpi', foregroundSize: 216, launcherSize: 96 },
{ density: 'mipmap-xxhdpi', foregroundSize: 324, launcherSize: 144 },
{ density: 'mipmap-xxxhdpi', foregroundSize: 432, launcherSize: 192 },
];
/**
* Generates Android mipmap launcher icons from the source icon.
* The foreground layer centers the content within the adaptive icon safe zone
* (72/108dp = 66.7% of canvas), leaving transparent padding for the system mask.
*/
async function generateAndroidIcons() {
const resDir = path.join(rootDir, 'android', 'app', 'src', 'main', 'res');
for (const { density, foregroundSize, launcherSize } of androidDensities) {
const dir = path.join(resDir, density);
// Foreground layer: content occupies 72/108 of the canvas (safe zone), centered
const contentSize = Math.round(foregroundSize * (72 / 108));
const padding = Math.round((foregroundSize - contentSize) / 2);
const foregroundBuffer = await sharp(sourceIcon)
.resize(contentSize, contentSize, { fit: 'contain', background: { r: 0, g: 0, b: 0, alpha: 0 } })
.extend({ top: padding, bottom: padding, left: padding, right: padding, background: { r: 0, g: 0, b: 0, alpha: 0 } })
.png()
.toBuffer();
await fs.writeFile(path.join(dir, 'ic_launcher_foreground.png'), foregroundBuffer);
console.log(`${density}/ic_launcher_foreground.png (${foregroundSize}x${foregroundSize}, content ${contentSize}px)`);
// Legacy launcher icon (ic_launcher, ic_launcher_round) — plain square resize
const legacyBuffer = await sharp(sourceIcon)
.resize(launcherSize, launcherSize, { fit: 'contain', background: { r: 0, g: 0, b: 0, alpha: 0 } })
.png()
.toBuffer();
await fs.writeFile(path.join(dir, 'ic_launcher.png'), legacyBuffer);
await fs.writeFile(path.join(dir, 'ic_launcher_round.png'), legacyBuffer);
console.log(`${density}/ic_launcher.png + ic_launcher_round.png (${launcherSize}x${launcherSize})`);
}
}
async function main() { async function main() {
console.log('Generating icons from:', sourceIcon); console.log('Generating icons from:', sourceIcon);
console.log(''); console.log('');
@@ -57,6 +107,10 @@ async function main() {
await generateElectronIcons(); await generateElectronIcons();
console.log(''); console.log('');
console.log('=== Android Mipmap Icons ===');
await generateAndroidIcons();
console.log('');
console.log('Done!'); console.log('Done!');
} }