Convert Figma logo to code with AI

zhanghai logoMaterialFiles

Material Design file manager for Android

5,759
385
5,759
425

Top Related Projects

Material design file manager for Android

Easy app for managing your files without ads, respecting your privacy & security

47,030

The Magic Mask for Android

5,708

FastHub the ultimate GitHub client for Android.

4,237

📱 Nextcloud Android app

Quick Overview

MaterialFiles is an open-source, Material Design file manager for Android. It offers a modern, user-friendly interface for managing files on Android devices, with support for various storage types including local storage, SD cards, and SMB.

Pros

  • Beautiful Material Design interface, adhering to modern Android design guidelines
  • Supports multiple storage types, including local storage, SD cards, and SMB
  • Offers root access for advanced file management capabilities
  • Includes features like dark theme, file compression, and FTP server functionality

Cons

  • May have a steeper learning curve for users accustomed to simpler file managers
  • Some advanced features require root access, which may not be available on all devices
  • Occasional stability issues reported by some users
  • Limited cloud storage integration compared to some other file managers

Getting Started

To use MaterialFiles on your Android device:

  1. Visit the Google Play Store and search for "MaterialFiles"
  2. Install the app on your device
  3. Open the app and grant necessary permissions
  4. Start exploring and managing your files using the intuitive interface

For developers interested in contributing to the project:

  1. Fork the repository on GitHub
  2. Clone your fork: git clone https://github.com/your-username/MaterialFiles.git
  3. Set up the project in Android Studio
  4. Make your changes and submit a pull request

Note: This is not a code library, so no code examples are provided.

Competitor Comparisons

Material design file manager for Android

Pros of AmazeFileManager

  • More extensive feature set, including cloud storage support and app manager
  • Larger community and more frequent updates
  • Available on F-Droid, making it more accessible for open-source enthusiasts

Cons of AmazeFileManager

  • Less focus on Material Design principles compared to MaterialFiles
  • More complex codebase, potentially making it harder for new contributors
  • Slightly larger app size due to additional features

Code Comparison

MaterialFiles uses Kotlin and focuses on a clean, modern approach:

class FileListAdapter : ListAdapter<FileItem, FileItemViewHolder>(
    FileItemCallback()
) {
    // ...
}

AmazeFileManager uses Java and has a more traditional structure:

public class MainActivityHelper {
    public void showCompressDialog(MainActivity mainActivity, ArrayList<HybridFileParcelable> baseFiles) {
        // ...
    }
}

Both projects demonstrate good coding practices, but MaterialFiles' use of Kotlin and more recent Android development patterns may appeal to developers looking for a more modern codebase. AmazeFileManager's Java-based approach might be preferred by those more comfortable with traditional Android development.

Easy app for managing your files without ads, respecting your privacy & security

Pros of Simple-File-Manager

  • Lightweight and simple user interface
  • Part of a suite of simple, open-source Android apps
  • Focuses on basic file management tasks

Cons of Simple-File-Manager

  • Limited advanced features compared to MaterialFiles
  • Less modern design aesthetic
  • Fewer file system integrations

Code Comparison

MaterialFiles:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    binding = FileListFragmentBinding.inflate(inflater, container, false)
    return binding.root
}

Simple-File-Manager:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setupOptionsMenu()
    refreshItems()
}

MaterialFiles uses view binding and a more modular approach, while Simple-File-Manager follows a more traditional Android development pattern. MaterialFiles' code structure suggests a more complex and feature-rich application, whereas Simple-File-Manager's code reflects its focus on simplicity and basic functionality.

47,030

The Magic Mask for Android

Pros of Magisk

  • Provides root access and system modification capabilities
  • Offers a wide range of modules for customizing Android devices
  • Has a large and active community for support and development

Cons of Magisk

  • Requires more technical knowledge to use effectively
  • Can potentially void device warranty or cause system instability if misused
  • Limited file management capabilities compared to MaterialFiles

Code Comparison

MaterialFiles (Java):

public static void copyFile(Path source, Path target, CopyOption... options)
        throws IOException {
    Files.copy(source, target, options);
}

Magisk (C):

static int copy_file(const char *src, const char *dest) {
    int src_fd = xopen(src, O_RDONLY | O_CLOEXEC);
    if (src_fd < 0)
        return -1;
    int dest_fd = xopen(dest, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644);
    if (dest_fd < 0) {
        close(src_fd);
        return -1;
    }
    int ret = xsendfile(dest_fd, src_fd, NULL, INT_MAX);
    close(src_fd);
    close(dest_fd);
    return ret;
}

While both projects handle file operations, MaterialFiles focuses on providing a user-friendly file management interface, whereas Magisk's file operations are part of its broader system modification capabilities.

5,708

FastHub the ultimate GitHub client for Android.

Pros of FastHub

  • Focused on GitHub interactions, providing a comprehensive mobile client for GitHub
  • More feature-rich for GitHub-specific tasks like issue tracking and pull request management
  • Larger community and more frequent updates

Cons of FastHub

  • Limited to GitHub functionality, not a general-purpose file manager
  • May have a steeper learning curve for users unfamiliar with GitHub's interface
  • Less emphasis on material design principles compared to MaterialFiles

Code Comparison

MaterialFiles (Java):

public class FileSystemProvider extends DocumentsProvider {
    @Override
    public Cursor queryChildDocuments(String parentDocumentId, String[] projection,
                                      String sortOrder) throws FileNotFoundException {
        // Implementation for querying child documents
    }
}

FastHub (Kotlin):

class RepoFilesFragment : BaseFragment<RepoFilesMvp.View, RepoFilesPresenter>(),
    RepoFilesMvp.View {

    override fun onItemClicked(position: Int, v: View?, item: RepoFile) {
        // Handle file item click
    }
}

MaterialFiles focuses on file system operations, while FastHub emphasizes GitHub-specific functionality. The code snippets reflect their different purposes, with MaterialFiles handling document queries and FastHub managing repository file interactions.

4,237

📱 Nextcloud Android app

Pros of Nextcloud

  • Comprehensive cloud synchronization and file management solution
  • Robust collaboration features and integration with Nextcloud ecosystem
  • Active development with frequent updates and large community support

Cons of Nextcloud

  • Larger app size and potentially higher resource usage
  • Steeper learning curve due to more complex features and settings
  • Primarily focused on Nextcloud server integration, less versatile for local file management

Code Comparison

MaterialFiles:

public class FileListAdapter extends SimpleAdapter<FileItem> {
    // ...
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        FileItem item = getItem(position);
        holder.icon.setImageResource(item.getIconRes());
        holder.name.setText(item.getName());
    }
}

Nextcloud:

public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    // ...
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        OCFile file = getItem(position);
        ((OCFileListItemViewHolder) holder).bind(file, mAccount, mTransferServiceGetter,
                                                 mComponentsGetter);
    }
}

Both adapters handle file list display, but Nextcloud's implementation is more complex due to additional features and integration with the Nextcloud ecosystem.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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 GitHub

Help translation on Transifex (Search Android & GNOME translations, Microsoft language resources, MIME type translations)

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 FTP, SFTP, SMB and WebDAV 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 aren'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 certificate, 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 <https://www.gnu.org/licenses/>.