Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b0f9a55
Proguard rules fix to include everything below org.bouncycastle.jcajc…
TranceLove Jan 1, 2026
3a67b52
Fixes for path traversal vulnerabilities
TranceLove Mar 25, 2026
7d970e9
Changes per PR feedback
TranceLove Mar 29, 2026
3200bfa
Fix edit SMB connection unable to populate value to dialog
TranceLove Apr 4, 2026
9040316
Add test case for malicious RAR
TranceLove Apr 4, 2026
402d26c
Changes per PR feedback
TranceLove Apr 4, 2026
ae50772
Merge pull request #4537 from TeamAmaze/bugfix/sshj-release-proguard-fix
EmmanuelMess May 17, 2026
5666d63
Changes per PR feedback
TranceLove Jun 20, 2026
fde039a
Changes per PR feedback
TranceLove Jun 22, 2026
8fc7822
Additional test cases for quality gates to tar.bz2, tar.xz and tar.lz…
TranceLove Jun 26, 2026
6976cfb
Merge pull request #4598 from TranceLove/bugfix/4543
EmmanuelMess Jul 3, 2026
85c1671
Merge pull request #4591 from TeamAmaze/bugfix/extract-entry
EmmanuelMess Jul 15, 2026
f058cc4
Upgrade Google Play Billing library to 8.0.0
TranceLove Jul 23, 2026
50024d8
Merge pull request #4685 from TeamAmaze/feature/billing-8.0
VishnuSanal Jul 23, 2026
1d7520e
v3.11.3 -> update version code and changelog
VishnuSanal Jul 30, 2026
e7733bc
Merge pull request #4696 from VishnuSanal/hotfix/3.11.3
VishnuSanal Aug 1, 2026
6ccda33
Add back missing bits in Android Main CI workflow
VishnuSanal Aug 1, 2026
1cd239e
Merge pull request #4700 from VishnuSanal/hotfix/3.11.3
EmmanuelMess Aug 1, 2026
feebe13
Fix Espresso tests failing on #4692
TranceLove Aug 5, 2026
b7c1d30
Changes per PR feedback
TranceLove Aug 6, 2026
18b58da
Fix failing BackupPrefsFragmentTest
TranceLove Aug 7, 2026
10c4222
More test fixes
EmmanuelMess Aug 9, 2026
2f03bac
Merge pull request #4702 from TeamAmaze/bugfix/espresso-tests
EmmanuelMess Aug 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 48 additions & 19 deletions .github/workflows/android-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ jobs:
name: Check spotless
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: "temurin"
java-version: 17
Expand All @@ -28,20 +28,20 @@ jobs:
ndk-version: r28c
link-to-sdk: true
local-cache: true
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Check formatting using spotless
uses: gradle/actions/setup-gradle@v3
with:
arguments: spotlessCheck
run: ./gradlew spotlessCheck

build:
name: Build debug, Jacoco test and publish to codacy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: "temurin"
java-version: 17
Expand All @@ -50,7 +50,7 @@ jobs:
with:
toolchain: stable
- name: Cache Rust dependencies
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: |
~/.cargo/bin/
Expand Down Expand Up @@ -78,14 +78,12 @@ jobs:
echo "❌ .cargo/config.toml missing"
exit 1
fi
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Build with Gradle
uses: gradle/actions/setup-gradle@v3
with:
arguments: assembledebug
run: ./gradlew assembledebug
- name: Run test cases
uses: gradle/actions/setup-gradle@v3
with:
arguments: jacocoTestPlayDebugUnitTestReport
run: ./gradlew jacocoTestPlayDebugUnitTestReport
- name: Publish test cases
run: |
export CODACY_PROJECT_TOKEN=${{ secrets.CODACY_TOKEN }}
Expand All @@ -109,21 +107,52 @@ jobs:
api-level: [ 21, 28 ]
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Java 17
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: "temurin"
java-version: 17
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Cache Rust dependencies
uses: actions/cache@v5
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
file_operations/target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Setup Rust for Android
run: |
cd file_operations
chmod +x setup_rust_android.sh
./setup_rust_android.sh
- name: Verify Rust setup
run: |
cd file_operations
echo "🔍 Verifying Rust Android targets..."
rustup target list --installed | grep android || echo "No Android targets found"
echo "🔍 Verifying cargo configuration..."
if [ -f .cargo/config.toml ]; then
echo "✅ .cargo/config.toml exists"
else
echo "❌ .cargo/config.toml missing"
exit 1
fi
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Gradle cache
uses: gradle/actions/setup-gradle@v3
- name: AVD cache
uses: actions/cache@v4
uses: actions/cache@v5
id: avd-cache
with:
path: |
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ android {
applicationId "com.amaze.filemanager"
minSdkVersion libs.versions.minSdk.get().toInteger()
targetSdkVersion libs.versions.targetSdk.get().toInteger()
versionCode 124
versionName "3.11.2"
versionCode 125
versionName "3.11.3"
multiDexEnabled true

vectorDrawables.useSupportLibrary = true
Expand Down
12 changes: 6 additions & 6 deletions app/proguard.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -86,17 +86,14 @@
-keep class org.bouncycastle.crypto.prng.* {*;}
-keep class org.bouncycastle.crypto.signers.* {*;}

-keep class org.bouncycastle.jcajce.provider.asymmetric.* {*;}
-keep class org.bouncycastle.jcajce.provider.asymmetric.util.* {*;}
-keep class org.bouncycastle.jcajce.provider.asymmetric.dh.* {*;}
-keep class org.bouncycastle.jcajce.provider.asymmetric.ec.* {*;}
-keep class org.bouncycastle.jcajce.provider.asymmetric.rsa.* {*;}
-keep class org.bouncycastle.jcajce.provider.asymmetric.** {*;}

-keep class org.bouncycastle.jcajce.provider.digest.** {*;}
-keep class org.bouncycastle.jcajce.provider.keystore.** {*;}
-keep class org.bouncycastle.jcajce.provider.symmetric.** {*;}
-keep class org.bouncycastle.jcajce.spec.* {*;}
-keep class org.bouncycastle.jce.** {*;}
-keep class org.bouncycastle.openssl.** {*;}

-dontwarn org.bouncycastle.jsse.**
-dontwarn org.bouncycastle.asn1.ASN1ApplicationSpecific
Expand Down Expand Up @@ -127,4 +124,7 @@
}

-keep class com.amaze.trashbin.** { *; }
-dontwarn ch.qos.logback.core.net.*
-dontwarn ch.qos.logback.core.net.*

-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
package com.amaze.filemanager.test

import android.content.Context
import android.os.Build
import android.os.Build.VERSION_CODES
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
Expand All @@ -40,16 +42,21 @@ object StoragePermissionHelper {
*/
@JvmStatic
fun grantManageStoragePermission() {
// Only need to run on Androids >= R
if (Build.VERSION.SDK_INT < VERSION_CODES.R) {
return
}

// Ensure that an activity that has the dialog is launched
ActivityScenario.launch(MainActivity::class.java)

val context: Context = InstrumentationRegistry.getInstrumentation().targetContext
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

val amazeResources = context.packageManager.getResourcesForApplication(context.packageName)
val grantPermissionExplanation = amazeResources.getString(R.string.grant_all_files_permission)
val grantPermissionHeader = amazeResources.getString(R.string.grantper)

if (device.hasObject(By.text(grantPermissionExplanation))) {
if (device.hasObject(By.text(grantPermissionHeader))) {
// First press Amaze's grant button
onView(withText(R.string.grant)).perform(click())

Expand Down
Loading
Loading