An open source Material Design file manager, for Android

Overview

Material Files

本文中文版

Android CI status GitHub release License

An open source Material Design file manager, for Android 5.0+.

Get it on Google Play Get it on F-Droid

Get it on Coolapk Get the APK

Help translation on Transifex

Preview

Features

  • Open source: Lightweight, clean and secure.
  • Material Design: Follows Material Design guidelines, with attention into details.
  • Breadcrumbs: Navigate in the filesystem with ease.
  • Root support: View and manage files with root access.
  • Archive support: View, extract and create common compressed files.
  • NAS support: View and manage files on SFTP and SMB servers.
  • Themes: Customizable UI colors, plus night mode with optional true black.
  • Linux-aware: Like Nautilus, knows symbolic links, file permissions and SELinux context.
  • Robust: Uses Linux system calls under the hood, not yet another ls parser.
  • Well-implemented: Built upon the right things, including Java NIO2 File API and LiveData.

Why Material Files?

Because I like Material Design, and clean Material Design.

There are already a handful of powerful file managers, but most of them just isn't Material Design. And even among the ones with Material Design, they usually have various minor design flaws (layout, alignment, padding, icon, font, etc) across the app which makes me uncomfortable, while still being minor enough so that not everybody would care to fix it. So I had to create my own.

Because I want an open source file manager.

Most of the popular and reliable file managers are just closed source, and I sometimes use them to view and modify files that require root access. But deep down inside, I just feel uneasy with giving any closed source app the root access to my device. After all, that means giving literally full access to my device, which stays with me every day and stores my own information, and what apps do with such access merely depends on their good intent.

Because I want a file manager that is implemented the right way.

  • This app implemented Java NIO2 File API as its backend, instead of inventing a custom model for file information/operations, which often gets coupled with UI logic and grows into a mixture of everything (example). On the contrary, a decoupled backend allows cleaner code (which means less bugs), and easier addition of support for other file systems.

  • This app doesn't use java.io.File or parse the output of ls, but built bindings to Linux syscalls to properly access the file system. java.io.File is an old API missing many features, and just can't handle things like symbolic links correctly, which is the reason why many people rather parse ls instead. However parsing the output ls is not only slow, but also unreliable, which made Cabinet broken on newer Android versions. By virtue of using Linux syscalls, this app is able to be fast and smooth, and handle advanced things like Linux permissions, symbolic links and even SELinux context. It can also handle file names with invalid UTF-8 encoding because paths are not naively stored as Java Strings, which most file managers does and fails during file operation.

  • This app built its frontend upon modern ViewModel and LiveData which enables a clear code structure and support for rotation. It also properly handles things like errors during file operation, file conflicts and foreground/background state.

In a word, this app tries to follow the best practices on Android and do the right thing, while keeping its source code clean and maintainable.

Because I know people can do it right.

Nautilus is a beautifully-designed and user-friendly file manager on Linux desktop, and it's fully Linux-aware. Phonograph is an open source Material Design music player app (which I've been using for years), and it has just the right Material Design and implementation.

So, it's time for yet another Android file manager.

Inclusion in custom ROMs

Thank you if you choose to include Material Files in your custom ROM! However since I've received several user complaints due to improper inclusion, I'd like to offer some suggestions on including this app properly for the good of end users:

  • Please don't replace the AOSP DocumentsUI app with this app. This app is not designed to replace DocumentsUI and can't handle a number of functionalities in DocumentsUI - in fact, it relies on DocumentsUI to do things like granting external SD card access.

  • Please make sure this app can be uninstalled or at least disabled. Some users may not want this app for a variety of reasons, and get very upset when they can't remove it.

  • Please avoid conflict with the Play/F-Droid version of this app. App stores cannot update apps signed with a different signature, so you can either ship an APK that's signed by me (or F-Droid) so that users will be able to update it on Play/F-Droid, or fork this project and rename the package name when you need to sign the APK with a different certificate and potentially making other changes.

License

Copyright (C) 2018 Hai Zhang

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see 
   .
Comments
  • Passphrase for SSH keys when connecting to a SFTP server

    Passphrase for SSH keys when connecting to a SFTP server

    putting a ed25519 private key in sftp server option wouldn't work (invalid key format). sshj seems to support it, so are there any other showstopper for this to be enabled?

    enhancement 
    opened by takase1121 32
  • Allow android/data access even without root

    Allow android/data access even without root

    Hello,

    when I was messing with my new pixel 6 prior to rooting it, I realized MaterialFiles (unlike Amaze File Manager), doesn't have access to Apps External Storage, located (on pixel's at least): /storage/emulated/0/Android/data

    this now either requires root, or to trigger it via SAF which would prompt a system dialog used to select that folder, to give MaterialFiles access to it, no root needed. It's the method amaze file manager uses.

    Would you be open to implement SAF, to address this issue for non-root users?

    duplicate question 
    opened by dhammel 31
  • [Enhancement] Performance optimization for smb/sftp/content streaming

    [Enhancement] Performance optimization for smb/sftp/content streaming

    When streaming to mpv and poweramp from smb/sftp, stutter happens pretty often. The current cache size is 1s, which is not sufficient. Increasing cache to 4s or 32MB would be a great improvement.

    Edit: information update https://github.com/zhanghai/MaterialFiles/issues/634#issuecomment-1003789646

    Problem solved for mpv https://github.com/zhanghai/MaterialFiles/issues/634#issuecomment-1003785420

    enhancement 
    opened by bakamosokyo 19
  • [BUG] Timeout while connecting to root process

    [BUG] Timeout while connecting to root process

    Greetings, When using root, I am not able to use the app properly. It doesn't let me access to the internal storage or the root storage. Using Android 10 (API level 29) Screenshot_20191212-195926_Material_Files

    bug 
    opened by TheEvilSkeleton 16
  • The three dot action item in app bar is behind navigation bar in landscape

    The three dot action item in app bar is behind navigation bar in landscape

    Please allow to gather URI path for internal storage like external storage along with making the default path to the file not the URI path for both internal and external storage when copying. This is much more convenient when needing a files path as on external storage the default path is the URI. Thanks for all your work and hope I'm not a bother. Not a big deal though.

    bug 
    opened by ghost 15
  • Direct SD Card write access on android 11

    Direct SD Card write access on android 11

    On my OnePlus X and on my Xiaomi Redmi 4X, both running unofficial LineageOS 18.1 builds (each by a separate maintainer) i can get legacy write access to the sd card without root access.

    One app that can do it is the closed-source file manager nextapp.fx for example, but i can also do it in MaterialFiles with some initial setup. (i tested FX version 8.0.3.0, version code 8008 which does not hold the MANAGE_EXTERNAL_STORAGE permission, has the requestLegacyExternalStorage manifest attribute set to true and targets SDK version 29)

    As it appears the only issue with the current version 1.3.1 of MaterialFiles on LineageOS 18.1 seems to be that the directory /storage can't be read which makes it impossible to browse the sd card path. However, if i work around this issue using root access and create a bookmark for the full sd card path legacy write access still works even if root access is disabled. Sadly, MaterialFiles only offers to create bookmarks of directories it can access and pasting directory paths is impossible in MaterialFiles so even if i know the full path to the sd card i can't create that bookmark without root access.

    The full sd card path can be inferred from the output of Context.getExternalFilesDirs(null). I don't know if there is any better way to do it but both Vanilla Music and the Simple Mobile Tools apps do it this way and artificially populate the directory listing for /storage with those values or generate their list of storage devices from it.

    It would be very useful if MaterialFiles could offer any way to access the legacy sd card path on android 11 without depending on root access.

    question 
    opened by SebiderSushi 14
  • Remove junrar from F-Droid build

    Remove junrar from F-Droid build

    Could you please remove junrar from F-Droid build? It's licensed under UnRAR, which is not an open source license. https://fedoraproject.org/wiki/Licensing:Unrar Not sure how file roller do that. Thanks!

    bug 
    opened by linsui 13
  • Unable to send files to SD card with FTP server.

    Unable to send files to SD card with FTP server.

    Tried sending files from pc to phone external storage (sd card) via ftp server using WinSCP program (mainly .zip and .pdf files). Only shows that it sent 0 bytes and when file opened programs don't show anything due to file being empty.

    Using version 1.1.4 (21)

    Screenshot 2021-01-31 005941 Screenshot_20210131-005831

    bug 
    opened by mrghosti3 12
  • "Material Files keeps stopping" when opening a picture

    Problem

    The app works great but strangely it crashes 100% of the time when opening one specific picture. If I try multiple times my system tells me "Material Files keeps stopping".

    Browsing for the file:

    Screenshot_20200915-085630

    Opening the file:

    Screenshot_20200915-085951

    Screenshot_20200915-085954


    Selecting the next picture "Majuscules_accentuees.jpg", it opens correctly but sliding to show the previous picture crashes again:

    Screenshot_20200915-090023


    System info

    Nokia 7.2 running Android 10 ("stock" Android).

    App version: 1.1.2 (20)


    Additional info

    I could have chosen to set another app as my default Photo viewer, but I am using Simple Gallery Pro and it cannot open images in directories it is not scanning. That's why I need to keep Material Files as my default photo viewer.

    bug 
    opened by PrSunflower 11
  • Add FTP client support

    Add FTP client support

    It'll be cool if I am able to add a FTP server as an external location. It'll be even better if SFTP and optionally FTPS is supported (I don't really think people still use FTPS anymore so it may be fine to not support that)

    enhancement 
    opened by takase1121 11
  • archive file cache still exists

    archive file cache still exists

    I know this bug was marked as closed in another issue but i'm still encountering it and able to reproduce it.

    Steps to reproduce:

    1: Open an archive 2: open an text file in the archive using "text editor" 3: close the "text editor" and archive and check the folder. /storage/emulated/0/Android/data/me.zhanghai.android.files/cache/open_cache

    question 
    opened by pokegamer5547 10
  • Alternative method of accessing data and obb

    Alternative method of accessing data and obb

    So I use material files and unable to access Android/data and Android/obb. But today another redditor told me he was able to get it to work with Mixplorer. I kinda figured out how it did this. Here is the recording:

    https://user-images.githubusercontent.com/64138578/211184012-80819449-ad81-4890-a3e1-87eca17c2833.mp4

    You can see that I can have access to individual dirs in Android/data and Android/obb, but not Android/data and Android/obb,

    The problem is that Android blocks RW access to Android/data and Android/obb, but not RW access to Android/data/* and Android/obb/*. So material files can access Android/data/app.revanced.manager.flutter, for example, but not Android/data.

    So we just need to ask SAF to give access to Android/data/<package_name> and Android/obb/<package_name>. But how can we get the package names? You can see that Mixplorer asks for the permission for listing the installed apps, thats how it gets the name of installed packages. You can also see I allowed it to query installed packages twice, possibily for Android/data and Android/obb respectively.

    I hope Material files can also implement this.

    Mixplorer Download Mixplorer

    In the meantime, you could use material files to add another storage to Android/data and Android/obb by asking Mixplorer to grant the permission via SAF.

    opened by SodaWithoutSparkles 3
  • [Feature Request] Add a monospace switcher to the file editing page

    [Feature Request] Add a monospace switcher to the file editing page

    When editing code and configuration files, using monospaced characters looks neater and easier to read, which makes editing more efficient. Non-monospace characters look messy. Therefore, if it's possible to add a toggle button for monospaced characters in the editing interface, we can improve editing efficiency.

    opened by Aleksanaa 0
  • Much slower SFTP transfer speed

    Much slower SFTP transfer speed

    I have switched from ES file explorer to Material files for a few months, And I realize theres a significant difference in file transfer speed.


    Test environment: SSH server

    • Raspberry Pi 4B 2GB ram
    • Ethernet connection
    • 240GB SSD less than half filled
    • OpenSSH_8.4p1 Debian-5+deb11u1, OpenSSL 1.1.1n 15 Mar 2022

    Test file: a 448MB .ts video file


    Material files starts slow at about 500KB/s, as indicated by the system network activity (theres no transfer speed in the notification, just transfered/total infomation). Then raised the speed to about 2 MB/s. I have waited until the number settles. The system network activity meter has a refresh interval of about 5 seconds

    Screenshot_2023-01-01-17-27-30-070_me.zhanghai.android.files-edit.jpg


    On the other hand, ES file explorer has a transfer window stating the file transfer was done at 52MB/s. The system network activity meter agreed with it, saying that it was transfering at about 54MB/s. IMG_20230101_174148.jpg


    And I have confirmed the speed by using termux and sftp. Also >45 MB/s IMG_20230101_175149.jpg


    For download speeds, theres also quite a difference. Screenshot_2023-01-01-18-03-23-336_me.zhanghai.android.files-edit.jpg IMG_20230101_180053.jpg IMG_20230101_180021.jpg

    • Material files: N/A, system: 4.6MB/s
    • ES file explorer: 55MB/s, system: 59.8MB/s
    • Termux sftp: 47MB/s, system: 57MB/s

    Material files transfer at 2-5MB/s fluctuating, but never reaches above 10MB/s

    Why is there such a difference?

    opened by SodaWithoutSparkles 3
  • FTP Client recursively only lists root directory

    FTP Client recursively only lists root directory

    version: latest steps to reproduce:

    • add a FritzBox NAS as FTP server
    • open added storage -> works as expected
    • try to open folder

    expected result:

    • contents of selected folder is shown

    actual result:

    • root directory is shown again while selected folder is added to breadcrumbs

    Unfortunately, I don't know what causes this to happen on the Fritzbox FTP server, but not on others. I tested this solution posted on stackoverflow and it indeed solves the issue. (Adding changeWorkingDirectory(pathname) here)

    https://user-images.githubusercontent.com/51318535/205460445-361be1c7-5b80-4c01-9475-615f1c9e8bb4.mp4

    opened by SamuelMezger 0
Releases(v1.5.2)
The flexible, easy to use, all in one drawer library for your Android project. Now brand new with material 2 design.

MaterialDrawer ... the flexible, easy to use, all in one drawer library for your Android project. What's included ?? • Setup ??️ • Migration Guide ??

Mike Penz 11.6k Dec 27, 2022
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Dec 26, 2022
Implementation of Ripple effect from Material Design for Android API 9+

RippleEffect ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow a ma

Robin Chutaux 4.9k Dec 30, 2022
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more.

Carbon Material Design implementation for Android 4.0 and newer. This is not the exact copy of the Lollipop's API and features. It's a custom implemen

null 3k Jan 9, 2023
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
[] Android Library that implements Snackbars from Google's Material Design documentation.

DEPRECATED This lib is deprecated in favor of Google's Design Support Library which includes a Snackbar and is no longer being developed. Thanks for a

null 1.5k Dec 16, 2022
Android Sample Project with Material Design and Toolbar.

AndroidMaterialDesignToolbar -- PROJECT IS NOT SUPPORTED Android Sample Project with Material Design and Toolbar. Project use Appcompat library for ma

kemal selim tekinarslan 713 Nov 11, 2022
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Jan 3, 2023
A library support form with material design, construct same with Android UI Framework

SwingUI A slight Java Swing library support form with material design, construct same with Android UI Framework writen in Kotlin Supported: 1. Screen:

Cuong V. Nguyen 3 Jul 20, 2021
Android Material Design Components

Android-Material-Design-Components Material design is a comprehensive guide for visual, motion, and interaction design across platforms and devices. G

Velmurugan Murugesan 3 Jun 10, 2022
Modular and customizable Material Design UI components for Android

Material Components for Android Material Components for Android (MDC-Android) help developers execute Material Design. Developed by a core team of eng

Material Components 14.4k Dec 31, 2022
Easy creation and management of toggle buttons on Android from the Material Design spec.

ToggleButtonLayout Easy creation and management of toggle buttons from the Material Design spec. Read more about ToggleButtonLayout in our blog post.

Savvy 229 Jan 9, 2023
A gradle plugin that generates Material Design 3 theme for Android projects.

Same as Google's Material Theme Builder, but as a gradle plugin.

Rikka apps 41 Dec 6, 2022
Material Design icons by Google

Material design icons Material design icons is the official icon set from Google. The icons are designed under the material design guidelines. 4.0.0 U

Google 47.1k Jan 9, 2023
A Material Design ViewPager easy to use library

MaterialViewPager Material Design ViewPager easy to use library Sample And have a look on a sample Youtube Video : Youtube Link Download In your modul

Florent CHAMPIGNY 8.2k Jan 1, 2023
EditText in Material Design

MaterialEditText NOTE: 2.0 is NOT BACKWARDS COMPATIBLE! See more on wiki or 中文看这里 AppCompat v21 makes it easy to use Material Design EditText in our a

Kai Zhu 6.1k Dec 30, 2022
Material Design ProgressBar with consistent appearance

MaterialProgressBar Material Design ProgressBar with consistent appearance on Android 4.0+. Why MaterialProgressBar? Consistent appearance on Android

Hai Zhang 2.2k Dec 21, 2022
Navigation Drawer Activity with material design style and simplified methods

MaterialNavigationDrawer Navigation Drawer Activity with material design style and simplified methods       It requires 10+ API and android support v7

Fabio Biola 1.6k Jan 5, 2023