• Stars
    star
    4,599
  • Rank 8,790 (Top 0.2 %)
  • Language
    Kotlin
  • License
    GNU General Publi...
  • Created almost 6 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Material Design file manager for Android

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 (Search Android & GNOME translations, Search Microsoft translations, 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 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 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/>.

More Repositories

1

Douya

开源的 Material Design 豆瓣客户端(A Material Design app for douban.com)
Java
4,542
star
2

MaterialProgressBar

Material Design ProgressBar with consistent appearance
Java
2,214
star
3

MaterialRatingBar

Material Design RatingBar with better appearance
Java
1,950
star
4

MaterialColdStart

Utilize the window background during cold start time to make your app look faster.
Shell
1,226
star
5

PatternLock

Material Design Pattern Lock with auth flow implementation
Java
690
star
6

AndroidFastScroll

Fast scroll for Android RecyclerView and more
Java
666
star
7

CustomTabsHelper

Custom tabs, made easy.
Java
384
star
8

Untracker

App to help you remove tracking information before sharing links
Kotlin
193
star
9

archexp

浙江大学计算机体系结构课程实验
Verilog
157
star
10

AppIconLoader

Android app icon loader from AOSP iconloaderlib
Java
149
star
11

MaterialEditText

Material Design EditText with a delightful linear ripple in background
Java
146
star
12

zju-csse-undergraduate-design-latex-template

浙江大学计算机科学与技术、软件工程专业本科毕业设计 LaTeX 模板
TeX
130
star
13

SystemUiHelper

Helper for dealing with Android System UI visibility
Java
115
star
14

BeeShell

Java REPL on Android with BeanShell
Kotlin
98
star
15

EffortlessPermissions

An Android permission library extending Google's EasyPermissions with convenient additions.
Java
85
star
16

ComposePreference

Preference implementation for Jetpack Compose Material 3
Kotlin
84
star
17

TextSelectionWebSearch

Add web search to text selection toolbar on Android
Java
75
star
18

gnome-shell-extension-transparent-top-bar

GNOME Shell extension that brings back the transparent top bar when free-floating in GNOME Shell 3.32
JavaScript
73
star
19

DouyaApiKey

豆芽 API Key 设置向导
Java
69
star
20

DoubanYearProgress

Year progress for Douban
JavaScript
61
star
21

AndroidUtil

Utilities to make the life of an Android developer easier
Java
59
star
22

AndroidSVGScripts

Bash scripts to automate and extend the process of using SVG as Android image asset
Shell
56
star
23

AndroidRetroFile

Backport of java.nio.file API (JSR 203) for Android
Java
46
star
24

mipsasm

MIPS assembler and IDE
Java
46
star
25

libarchive-android

libarchive as an Android library
C
43
star
26

MaterialPlayPauseDrawable

Material Design play/pause Drawable with animation
Java
37
star
27

join-screenshots.zhanghai.me

Join screenshots with HTML5
HTML
22
star
28

opengl-c-solarsystem

Animated solar system model implemented with OpenGL and FreeGLUT in C
C
22
star
29

libselinux-android

libselinux as an Android library
C
21
star
30

orgexp

Computer Organization Experiment, Shi Qingsong, Zhejiang University.
Verilog
21
star
31

pykeymacs

Emacs style keyboard macros implemented in Python
Python
20
star
32

vntools

Tools for working with visual novels
C++
17
star
33

deadbeef-gnome-mmkeys

Add GNOME multimedia keys support in DeadBeef player using DBus
C
16
star
34

collision-detection-bubbles

A collision detection and resolution experiment with Two.js
JavaScript
15
star
35

gtkmmproject

Gtkmm CLion Project
CMake
12
star
36

linenoise-android

Linenoise as an Android library
C
12
star
37

qt5project

Qt 5 CLion project
C++
10
star
38

Reflected

Java library for easy-to-use reflection
Java
9
star
39

SeekBarPreference

A Preference that shows a dialog with a SeekBar widget.
Java
9
star
40

Bytecoder

Android gradle plugin to generate bytecode for accessing any method or field
Java
9
star
41

Functional

Java library for JavaScript-like functional methods
Java
8
star
42

zhsh

A minimal interactive shell written in C.
C
8
star
43

DouyaCiBuilds

豆芽 CI 构建版本仓库
8
star
44

AndroidLibraryTemplate

Android library template
7
star
45

Palette

Sample application to showcase android.support.v7.graphics.Palette
Java
6
star
46

twitter-unwanted-follower-remover

Semi-automatic command line tool for removing unwanted followers on Twitter
JavaScript
5
star
47

particle-system-campfire

A particle system experiment with Two.js
HTML
5
star
48

AimAndroid

Another Instant Messager app, Android.
Java
5
star
49

ColorPicker

Android color picker from AOSP
Java
5
star
50

Promise

Java library for JavaScript-like Promise
Java
4
star
51

AimBackend

Another Instant Messager app, backend.
JavaScript
4
star
52

kiscript

ECMAScript, kept simple.
C
4
star
53

gettext-po-parser

Gettext PO file parser
4
star
54

xkeymacs

X11 KEYboard MACroS
C
4
star
55

zhclib

A C library written by me
C
3
star
56

translations.zhanghai.me

Search translations in open source projects
HTML
3
star
57

markdown-template

Zhang Hai's markdown template
JavaScript
3
star
58

gnome-shell-extension-es6-class-codemod

A jscodeshift transform that helps migrating GNOME Shell extensions to 3.32
JavaScript
3
star
59

stone.zhanghai.me

(Zhang Hai's) The story of the stone
HTML
3
star
60

SsidTester

SSID tester for identifying ZJUWLAN difficulty. Also serves as a sample application for beginners.
Java
3
star
61

ZJUWLANAutoLogin

A chrome extesion that enables auto login when redirected to login page on ZJUWLAN
JavaScript
3
star
62

course_linux_programming

Linux programming course
C
3
star
63

resume.zhanghai.me

Zhang Hai's resume
HTML
3
star
64

fpga-life-game

Conway's game of life implemented on FPGA with combinational logic
Verilog
3
star
65

zh-conf-backup

Backup script for Zhang Hai's configuration
Shell
3
star
66

Labyrinth

Labyrinth game with OpenGL
Java
3
star
67

slides.zhanghai.me

Zhang Hai's slides
HTML
2
star
68

resume-legacy

Source of Zhang Hai's resume, legacy version
CSS
2
star
69

douya.zhanghai.me

Zhang Hai's Douya
ApacheConf
2
star
70

douya-website

Source of Zhang Hai's Douya project home
JavaScript
2
star
71

api-functions-worth-calling

API - Functions worth calling
HTML
2
star
72

optical-system-mfc

Optical System with MFC
C
2
star
73

ExpressionEvaluator

Expression evaluator written in Java
Java
2
star
74

AimFrontend

Another Instant Messager app, frontend.
Vue
2
star
75

zh-minecraft-saves

My Minecraft saves.
Shell
2
star
76

FxPaint

Paint app written with JavaFx
Java
2
star
77

projects.zhanghai.me

Zhang Hai's projects
HTML
2
star
78

calc

C Topic Project - A calculator based on operator precedence
C
2
star
79

lms

C Topic Project - A simple Library Management System
C
1
star
80

SePolicyInject

Android library to inject rules into binary SELinux kernel policies
CMake
1
star
81

DataStructure

An object oriented implementation of fundamental data structures (and algorithms) using C++11
C++
1
star
82

WordList

A simple android application to display specially annotated English word lists
Java
1
star
83

optical-system-qt

Optical System with Qt
C
1
star
84

seafile-server-github-actions-build

Seafile Server built by GitHub Actions
1
star
85

reveal-md-template

Reveal.js template with reveal-md
Makefile
1
star
86

reveal-js-template

Zhang Hai's reveal.js template
Shell
1
star
87

ShowcaseView

A fork from legacy branch of https://github.com/amlcurran/ShowcaseView
Java
1
star
88

www.zhanghai.me

Zhang Hai's main site
HTML
1
star
89

blog.zhanghai.me

Zhang Hai's blog
HTML
1
star
90

sevenzipjbind

Mirrored from git://sevenzipjbind.git.sourceforge.net/gitroot/sevenzipjbind/sevenzipjbind
C++
1
star
91

translations-index.zhanghai.me

Translations index
1
star
92

abnf-kt

ABNF parser generator for Kotlin
Kotlin
1
star