Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4b6d348
Initial deep-research and planning: open-source Android file manager …
osphvdhwj Nov 13, 2025
4ffd634
Add detailed library & feature component shortlist. Includes core lib…
osphvdhwj Nov 13, 2025
0c99218
Expand initial README in AllDocs-FileManager with features, library c…
osphvdhwj Nov 13, 2025
82a9c9b
Add docs/UI_UX_AND_LOGIC.md specifying user experience principles, pl…
osphvdhwj Nov 13, 2025
9c32a0b
Add complete Android application structure: Gradle config, manifest, …
osphvdhwj Nov 13, 2025
7d09f3e
Add AndroidManifest with necessary permissions and main activity conf…
osphvdhwj Nov 13, 2025
318ac27
Add core data models and file utilities for detecting file types and …
osphvdhwj Nov 13, 2025
639695b
Add ViewModels for file browsing state management and business logic
osphvdhwj Nov 13, 2025
762528b
Add Compose UI components: file browser screen with modern Material 3…
osphvdhwj Nov 13, 2025
9d836e4
Add file icon component and PDF viewer screen with AndroidPdfViewer i…
osphvdhwj Nov 13, 2025
ec34cb0
Add Office document viewer and archive viewer screens with Apache POI…
osphvdhwj Nov 13, 2025
892eb81
Add utility classes for Office document parsing and archive extractio…
osphvdhwj Nov 13, 2025
c6a6924
Add MainActivity with navigation, permission handling, and routing to…
osphvdhwj Nov 13, 2025
dc269a6
Add ProGuard rules for release builds and complete Gradle wrapper con…
osphvdhwj Nov 13, 2025
e0accee
Add comprehensive APPLICATION_GUIDE.md documenting complete app imple…
osphvdhwj Nov 13, 2025
1155fc9
Add dual-pane browsing, tabbed navigation, and cloud storage models w…
osphvdhwj Nov 13, 2025
182471c
Add advanced utility classes: encryption, FTP/SMB clients, storage an…
osphvdhwj Nov 13, 2025
cceba64
Add ViewModels for advanced features: tabs, encryption vault, bookmar…
osphvdhwj Nov 13, 2025
0ac9c5a
Add advanced UI screens: tabbed file browser, storage analyzer, app m…
osphvdhwj Nov 13, 2025
6f5624a
Add encryption vault screen, bookmarks drawer, and batch operations w…
osphvdhwj Nov 13, 2025
26d0083
Add missing dependency for Accompanist and update Gradle with advance…
osphvdhwj Nov 13, 2025
b7fc7b6
Add comprehensive FEATURES_LIST.md documenting all implemented featur…
osphvdhwj Nov 13, 2025
c7c361c
Add GitHub Actions CI workflow for building Android debug APK on main…
osphvdhwj Nov 13, 2025
2cb21e9
Add GitHub Actions workflow file for building APK on New-Nov_13 branc…
osphvdhwj Nov 13, 2025
19d75b6
Delete .github/workflows/android-build.yml
osphvdhwj Nov 13, 2025
22508da
Clean workflow YAML by removing invalid hidden control characters and…
osphvdhwj Nov 13, 2025
05d439e
Replace and customize the GitHub Actions workflow for the AllDocs Fil…
osphvdhwj Nov 13, 2025
5989ddb
Delete .github/workflows/build-new-nov13-apk.yml
osphvdhwj Nov 13, 2025
2980bf4
Update build-alldocs-apk.yml
osphvdhwj Nov 13, 2025
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
39 changes: 39 additions & 0 deletions .github/workflows/build-alldocs-apk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Build and Release APK

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 17

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Build Release APK
run: ./gradlew assembleRelease

- name: Upload APK to artifact
uses: actions/upload-artifact@v4
with:
name: AllDocsFileManager-release.apk
path: app/build/outputs/apk/release/app-release.apk
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,28 @@
# AllDocs-FileManager
A customizable open-source Android file manager with integrated PDF, document (Office), and archive (e.g., RAR) viewer capabilities, suitable for extension as an alldocumentreader-style app. Features centralized file browsing with support for multiple formats using modern open-source libraries.

## Core Features
- Clean file/folder browsing interface
- Open and view:
- PDF documents (AndroidPdfViewer, afreakyelf/Pdf-Viewer)
- Microsoft Office: DOCX/XLSX/PPTX (Apache POI, Andropen Office, docx4j)
- Compressed archives: RAR/ZIP/7z (UnRar Tool, SevenZipJBinding, ZArchiver for reference)
- Markdown and simple ebooks (Okular base/extension)
- No music/video media playback—docs/archives focus only
- Simple, user-focused UI (Compose)
- Extensible and developer-friendly codebase

## Getting Started
1. Clone this repo
2. Open with Android Studio
3. Add dependencies listed in `docs/COMPONENTS.md`

## License
Multi-license (component-specific): MIT/Apache/GPL. Review each library's license in `docs/COMPONENTS.md`.

## Credits
- AndroidPdfViewer, afreakyelf/Pdf-Viewer, docx4j-Android, Apache POI, UnRar Tool-Android, ZArchiver (GPL), Okular
- Inspiration: All Document Reader, Andropen Office, WPS Office, Office Documents Viewer

---
Initial architecture, docs, and plans in `/docs/`. AI-generated repo starter by request.
117 changes: 117 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
}

android {
namespace = "com.alldocs.filemanager"
compileSdk = 34

defaultConfig {
applicationId = "com.alldocs.filemanager"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = "17"
}

buildFeatures {
compose = true
}

composeOptions {
kotlinCompilerExtensionVersion = "1.5.3"
}

packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}

dependencies {
// Core Android
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.activity:activity-compose:1.8.0")

// Compose
implementation(platform("androidx.compose:compose-bom:2023.10.01"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
implementation("androidx.compose.material:material-icons-extended")

// Navigation
implementation("androidx.navigation:navigation-compose:2.7.5")

// ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2")

// Coroutines
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")

// PDF Viewer
implementation("com.github.barteksc:android-pdf-viewer:3.2.0-beta.1")

// Apache POI for Office documents
implementation("org.apache.poi:poi:5.2.3")
implementation("org.apache.poi:poi-ooxml:5.2.3")

// Archive support
implementation("org.apache.commons:commons-compress:1.24.0")
implementation("net.sf.sevenzipjbinding:sevenzipjbinding:16.02-2.01")
implementation("net.sf.sevenzipjbinding:sevenzipjbinding-all-platforms:16.02-2.01")

// Document parsing
implementation("org.apache.xmlbeans:xmlbeans:5.1.1")

// Coil for image loading
implementation("io.coil-kt:coil-compose:2.5.0")

// Accompanist for utilities
implementation("com.google.accompanist:accompanist-drawablepainter:0.32.0")
implementation("com.google.accompanist:accompanist-permissions:0.32.0")

// DataStore for preferences
implementation("androidx.datastore:datastore-preferences:1.0.0")

// Security/Encryption
implementation("androidx.security:security-crypto:1.1.0-alpha06")

// Testing
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation(platform("androidx.compose:compose-bom:2023.10.01"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
}
34 changes: 34 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.

# Keep Android components
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

# Keep Apache POI classes
-keep class org.apache.poi.** { *; }
-keep class org.apache.xmlbeans.** { *; }
-dontwarn org.apache.poi.**
-dontwarn org.apache.xmlbeans.**

# Keep PDF viewer
-keep class com.github.barteksc.pdfviewer.** { *; }

# Keep commons-compress
-keep class org.apache.commons.compress.** { *; }
-dontwarn org.apache.commons.compress.**

# Keep data classes
-keep class com.alldocs.filemanager.model.** { *; }

# Kotlin
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**

# Compose
-keep class androidx.compose.** { *; }
-dontwarn androidx.compose.**
59 changes: 59 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<!-- Permissions -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AllDocsFileManager"
tools:targetApi="31">

<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.AllDocsFileManager">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<!-- File opening support -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
<data android:mimeType="application/zip" />
<data android:mimeType="application/x-rar-compressed" />
</intent-filter>
</activity>

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>
Loading