Duo: Holo File Manager w/ Root




Duo: Holo File Manager w/ Root (DuoFM for short) aims to be your go-to app for everything file-related on your android device.
It is similar to Windows Explorer or Mac finder on your computer. Just like them, it can be used to access files on the device itself, and also to browse the files on your network or on cloud services.
DuoFM combines the features of the popular file managers (like Astro or ES Explorer) and root explorers.


There are many other file managers out there, and they all focus on different things. DuoFM focuses on two main things:

We want the application to fit perfectly within the modern android holo(graphic) style introduced with Ice Cream Sandwich (Android 4). We think the app should feel like it belongs to the core of android by the way it looks and by how you interact with it.
Not crashing is not enough. Features should work the way you expect them to. This includes a lot of little things, such as restoring the state correctly when coming back from the background, or reacting correctly to outside changes.
We want to fix any problem we might have missed, so please report any issue on our bug tracker. No registration is required. Please include as much information as possible.

DuoFM also takes a different approach to the way it implements some of the core features. The differences might not be noticeable at first glance, but they participate in making DuoFM rock solid and enable workflows that other applications don't support.
The most notable of those are:

Directory listing and updates
We use a consistent api for filesystem access, whether it is for superuser-only accessible files on a rooted device, or for the files on the internal storage. We built a custom high performance native (c) api that is optimized to maximize the performance of directory browsing and updates.
No intermediate copies
Whether it's for sending a file from a cloud service to gmail, for opening a picture from inside a zip, or for anything else, we never make extra copies. Not on the filesystem and not in memory. We support opening/sending/copying very large files, without requiring any space left on the internal or external storage. We only extract data from archives when it needs to be accessed and we only extract the part that absolutely needs to be extracted. We do not make temporary copies of the data, we stream it to the application that needs to read its content.

Nested archives
We developed a custom native (c) library to enable the browsing of nested archives (archives inside archives inside archives…), without needing to extract the content first, on disk or in memory.
Plugin architecture
We distribute our plugins as independent apps on google play. This way we can provide features that are very useful, but only to some of our users, and we do so without bloating the main application. Installs, updates and uninstalls of plugins are reflected in the main application right away, and do not require a restart.


DuoFM follows Google's design guidelines and has the look of the modern Holo theme. The Holo theme is usually only available on Android version 4 (Ice Cream Sandwich) or later, but since many devices are still running android 2.3 (Gingerbread), we implemented this look for this older version as well.

To navigate within an item, you simply press an it. Pressing a folder will navigate inside the folder and pressing an archive will navigate to the root of the archive.
The rest of the navigation is done through the Action Bar: a bar sitting at the top that you should be familiar with because all the stock applications use it. It includes:
- An UP button with the app logo
A little arrow on the left indicates that the action is available. Pressing it brings you one level up the hierarchy (to the parent directory or to the app or plugin home page if yu are already at the root).

- A location spinner
It's the text that displays the current location. As suggested by the familiar triangular icon on the right, pressing it brings up a dropdown menu. From that menu, you can navigate quickly to anywhere up the hierarchy, up to the home page.
The location spinner also includes a feature exclusive to DuoFM. It has quick jump links on the location text. They are activated by a long press.

All those features are used to navigate up the hierarchy, and are complimentary to the back button. That one just brings you back to the previous screen (in the illustration, we arrived here by clicking a bookmark on the home page, so the back button would bring us back to the home page).

What truly separates DuoFM's design from the other file managers is its dual view mode.

Adjustable dual view
At anytime, you can reveal another navigation pane on the left by sliding the view to the right. You are in complete control of where the left pane ends and the right one begins.
Each pane has a minimum size (two columns in grid mode). When you size it down, it gets progressively smaller until it reaches that minimum size. After that, it simply gets pushed off screen. In the illustration, we see the left pane is at its minimum size and has its left edge slightly off screen. The right pane is a bit larger than its minimum size and the two columns have started to grow in width. If the right pane had even more space, it would progressively switch to three columns and then four and so on.
The two panes are completely independent and they have their own history stack. When you press the back button, it brings back the previous screen on the pane that you touched last.

There are two different view modes: list and grid. You can toggle between the two independently on each pane, from an icon (second from the left) on the bottom (split) Action Bar.

List and grid view modes
Both modes have been optimized to be able to handle a very large number of files (many thousands) without increasing the app memory usage. They both display the same information: name, last modification date and file size.
The list mode can display longer names before truncating, and the text is a bit larger.
The grid mode displays thumbnails when possible. The number of columns adapts to the pane width, allowing it to display more items when the pane is wide. It has been tweaked to display separators (directory and file labels) spanning the full width.
The bottom (split) Action Bar provides actions to be performed on the current directory (paste, create new new folder, … ). For each item, there's a contextual menu (as suggested by the familiar little triangle). If you are using a keyboard, you can press the "m" key to activate it.
To perform actions on multiple items at a time, you have to enter the selection mode. You do so by long pressing on any item.
When in selection mode, the Action Bars change. The bottom one displays the actions available (copy, delete, share, … ). The top one displays the number of currently selected items with a spinner. Its dropdown provides shortcuts to change the selection (select all, deselect all, … ).

Core features

The home screen
The home screen gives quick access to all your files, organized in three categories:
- In-device and attachment storages:
- The filesystem root (/).
- The internal memory.
(where downloaded items get saved, and where the camera saves pictures and movies).- The external SDCard(s).
- On-The-Go (OTG) USB attachments.
If your device supports it (it provides enough power to the usb connector), you can browse mass storage devices (such as USB keys or 2.5in hard drives) connected to your phone or tablet with a simple OTG cable. All those are automatically detected and do not require any input (there's no need to specify if they exist, if they are connected or specify the path of their mount point).
- Plugins
Plugins are used to access files stored remotely.
There's a plugin for browsing files on your local network (windows or samba shares), and there are plugins for popular cloud services (Dropbox, Microsoft OneDrive and Google Drive).
We provide shortcuts to their page on google play in the settings of the application. From that settings page, you can also enable or disable each plugin individually.
More plugins will be added later (other cloud services, and other protocols, such as FTP and WIFI Direct).
- Bookmarks
You can bookmark any item from anywhere (a picture somewhere in google drive, a folder inside a zip archive, or a folder of the internal storage).
To bookmark an item, you need to navigate to it, and then select the Bookmark option from the contextual menu (menu accessible by pressing the little triangle).
Bookmarks can be renamed to provide a better name for the shortcut. By default, they use the name of the item.

The task manager
The task manager is accessible from the icon at the top/right of the navigation panes. The icon changes depending on whether a task is currently running (spinning circle) or not (sleep icon).
It can be used to check the history of the actions performed (paste, delete, archive, … ) and indicates if they succeeded, failed or were aborted. You can specify how long a command stays listed in the manager after it is finished from the overflow menu (three vertical dots).
For commands that are still running (there can be multiple ones), the manager shows their status and provides a mean to abort them.
Copy & paste
For maximum compatibility with other apps, DuoFM uses the official mechanism for copying. It puts the paths of the files to be copied in the clipboard. This way you can copy a file path from somewhere else and paste it in DuoFM, and similarly, you can copy a file in DuoFM and paste it in another application if it uses the official mechanism as well.
You do not have to wait while the paste operation is in progress. You can keep browsing and monitor the progress with the task manager. If DuoFM is in the background and it needs to prompt a confirmation dialog (they can be toggled off in the settings), it will pause and display the dialog the next time it comes back to the foreground.
Unlike with most file managers, copying a file with DuoFM also copies its modification date (this is usually only possible when superuser is enabled).

MediaStore & MTP updates
Some android devices use the MTP protocol to make the device storage available when connecting to a computer with a USB cable. This allows the content to be available on the computer and the android device at the same time. There's a special database used to cache file information. On some devices (such as the Galaxy Nexus & the Nexus 4), it is used to populate and update the MTP link (so that the computer sees the changes made on the device). Updating this database is therefore critical for people using the MTP connection.
A similar database called MediaStore is used for caching media information and thumbnails. It is used by the stock Gallery and Media Player applications. If it isn't updated correctly, those applications will not work properly.
That's why DuoFM takes extra steps to make sure those databases are updated when they need to be. Every time a file or folder is created, deleted or modified in a significant way, DuoFM checks if one of those databases need to be updated and does so accordingly. The MTP connection has some quirks and DuoFM uses special tricks to get around them.
Updating those databases correctly incurs a small performance hit, especially when copying lots of very small files. However, we believe that keeping those databases up to date to have other applications running correctly is worth the trade-off.
Full keyboard support
Android is available on many kinds of devices. Some can be docked and used as desktop replacement, and most can be used with an external bluetooth keyboard. That's why we support full keyboard navigation.
All the features are accessible from the keyboard with an easy to discover scheme.
By default, the keyboard focus goes to the list or grid of items on the pane that was used last. the arrow keys are used to move from one item to another. PAGE UP and PAGE DOWN are also implemented.
To trigger the context menu for an item, you can use the M key or one of the ALT keys.
Pressing ENTER is like pressing the item with a finger. A short press activates the item (navigates inside or opens it). A long press activates the selection mode. Once in selection mode, ENTER selects or deselects the item.
You can move from one pane to the next by long pressing the LEFT or RIGHT arrow.
You can access the action bar by long pressing the TOP or BOTTOM arrow. Once the action bar has focus, you can navigate from one action to another with the LEFT and RIGHT arrows.

You can browse zip and tar archives as if they were simple (read-only) directories, by simply pressing the item.
For other zip-based archives, such as android apks (application packages), a simple press will open them (for apks, it will ask to install them). However, you can browse the content by choosing Browse on the context menu.
If you want to extract content from an archive, simply select what you want to extract, copy, and then paste that content wherever you want.
This works with nested archives. They don't even need to be of the same type.
The content is not extracted if you just browse. Entries will only be streamed to the target destination or application if you ask to open, send or copy/paste them. Only those entries will be extracted.
Note that a zip archive can use many different types of compression. We support the most common ones: store, deflate (gzip) and bzip2. Right now we do not support the zip64 extension used for very large files or archives with a very large number of entries.
For simple gzipped (.gz) and bzipped (.bz2) compressed files, you can uncompress them from the context menu.
If you want to create an archive, you can zip your current selection by selecting the Archive option on the context menu.
File & folder details
You can bring up a details dialog from the context menu.
It repeats the information available in the row or cell: name, size and last modification date. The name can be copied with a long press.
In addition, it shows the access permissions, taking into account the permissions of the parent folder. For more detailed permissions and owner / group information, you should use the permissions dialog also available from the context menu.
For a file, it shows the MD5 hash.
For a folder, the size is the total of its content. The number of files and folders inside it are also listed. If superuser is not enabled, some files might not be accessible. The number of such files and folders is listed, and their sizes is not taken into account in the total.

Open & Send
The context menu has options for opening and sending files. The Send option is also available in selection mode when multiple items are selected.
Opening a file means viewing it in another application. Sending a file means sending it as an attachment to something: an email, a text message, a tweet, or anything else.
Opening is the default action. That's what is performed when you press a file with your finger.
Depending on the type of file, there can be zero, one or several applications available to open it. If there is at least one application available, you will see a dialog listing those. There's also a + icon on that dialog. It enables you to pick another application that isn't in the list, but that is registered to be able to open anything. On that dialog, you'll also notice a "Set as default" toggle. If you check it, then the next time you open a file of that type, it will open directly without showing this intermediary dialog.
If there aren't any application registered to open the specific file type, you will be presented directly with the list of applications that are registered to open any kind of file.
You can control that dialog for each file type. You do so in the settings, in the Mime Types section. In that section, you will see a list of file types classified into categories. You can add to that list if necessary. For each type, you can specify a default application. If you do so, the intermediary dialog will be bypassed.
You can also specify several applications rather than just one. The open dialog will then show only those.

You can sort directory content according to three criteria:
- Name (case insensitive alphabetical order) - The size (in bytes) - The last modification date This is done by using the first icon of the split (bottom action bar). The icon reflects the current state.
If you select the same criterion as the current one, it will toggle between ascending and descending order).
Note that folders and files are always separated into two categories, with the folders displayed first and the files displayed last.
The top action bar has a search icon. You can use it to search for items inside the current directory (recursively).
When you click on that icon, the action bar changes and reveals an input text field. It auto-completes with your search history.
You can use (Unix) globs if you want to match unknown characters, or you can simply type some text and it will search for any file or folder containing that text in their name.
The results are presented as a list or grid, just like any directory content, except they have an extra line of text indicating where they reside.

File picker
Some applications require the user to choose a file. They rely on other applications (called file pickers) to let the user browse through the available choices and select the one they want.
A good example of such application is GMail. When you are composing a message, you have options to add a picture or a video attachment.
DuoFM is registered as a file picker. When an application asks for a file, you can select DuoFM to pick it, and select any file, from any location you can browse to. This includes your local network or cloud services if you have the suitable plugin installed. You can also use the search and pick a file from the search results.
Sometimes the application requests only specific file types (images only for instance). The picker should restrict the user choices accordingly. However, the application might still accept a file of another type.
GMail is a good example for this as well. Even though it only gives you options to attach images or videos, it will work just fine if you select a zip, a pdf document or any other file. That's why DuoFM sets the filter on by default, but allows you to toggle it off if you want. You can get to this option, as well as switch between list and grid view, from the overflow menu of the bottom bar.
Note that archives are always listed, even when the filter is on, because you can browse inside them and select a file of the suitable type from inside the archive.

Superuser features

Partition remount
User applications, libraries and settings reside in a partition (/data) that only superuser and adb (android bridge) shell have access to.
System applications and libraries reside on another partition (/system) that is accessible to all users, but is mounted read-only. The factory image usually also resides on its own read-only partition.
Even superuser cannot modify anything in those read-only partitions without remounting them as read-write first.
When you enable superuser in DuoFM settings, by default, it will also remount read-only partitions as read-write.
You can however turn that off by setting the Remount option to No.
The context menu offers an option called Permissions. It opens a dialog listing the Unix permissions in one tab, and the owner / group in a second tab.
Some partitions are mounted so that those settings cannot be changed. That's usually the case for the internal storage and external SDCards. For those, the dialog is read-only.
In the /data and /system partitions however, superuser can change them. DuoFM detects when changing permissions, owner or group is possible, and changes the dialog to become editable. Even special permissions (suid, guid and sticky bit) can be changed. You can change permissions only, group and owner only, or both. For folders, you have the option to apply those changes to all their content recursively.


There's a dedicated page for plugins in the settings. It lists the plugins in different categories:
- Installed
Pressing them brings a settings page specific to that plugin.
- Installed but in need of an update
Pressing them brings you to their page on google play
- Available but not installed
Pressing them brings you to their page on google play as well.
- Coming soon
Those are the plugins that we started working on but are not available yet.

(Local Area Network)

The LAN plugin adds access to Windows shares (or Samba) on a local network.
The first step is to scan for host computers. Both host names (or MAC addresses if the host names are not available) and IP addresses are listed. You can specify a name and it will stay attached to the MAC address for future scans.
If connecting to your local network requires special parameters (a custom socket port for instance), you can adjust those in the settings.
Once scanning is done, you can click on a host. The first time, a dialog will pop up, asking for the login credentials. We store these in an encrypted form (with strong AES encryption). Then you can browse the content of shared directories on that host. All the functions work as if the files were local, including search.


This plugin adds access to Microsft OneDrive (formerly named SkyDrive) accounts.
The first step is to add an account. Doing so brings up a login dialog. If two-factor authentication is enabled on the account, you can enter the verification code in the dialog. We do not store the login and password but rather the OAuth token associated with DuoFM for your account. It is stored encrypted with strong AES encryption.
You can add as many accounts as you want.
Once you have an account setup, you can click on it, and then browse your files. All the functions work as if the files were local. Search works, but OneDrive does not support globs for advanced searches.

This plugin adds access to Dropbox accounts.
The first step is to add an account. Doing so brings up a login dialog. If two-factor authentication is enabled on the account, you can enter the verification code in the dialog. We do not store the login and password but rather the OAuth token associated with DuoFM for your account. It is stored encrypted with strong AES encryption.
You can add as many accounts as you want.
Once you have an account setup, you can click on it, and then browse your files. All the functions work as if the files were local. Search works, but Dropbox does not support globs for advanced searches.

Google Drive
This plugin adds access to Google Drive accounts.
The first step is to add an account. Doing so brings up a login dialog. If two-factor authentication is enabled on the account, you can enter the verification code in the dialog. Application specific passwords are not supported. We do not store the login and password but rather the OAuth token associated with DuoFM for your account. It is stored encrypted with strong AES encryption.
You can add as many accounts as you want.
Once you have an account setup, you can click on it, and then browse your files. All the functions work as if the files were local. Search works, but Google Drive does not support globs for advanced searches.

This plugin adds access to FTP and SSH2 server data.
The first step is to add a server by providing its address and selecting one of the two protocols: SSH2 (SFTP) or regular FTP (with or without SSL/TLS).
Once the server is setup, you can click on it. You have the option to enter the password everytime or to have DuoFM remember it. We store the passwords in an encrypted form (with strong AES encryption). Then you can browse the files one the server. All the functions work as if the files were local, including search.


Android versions

- Gingerbread (2.3.3 - API 10) and up.

- All Kindle Fire and Kindle Fire HD versions.

Form factors

- Phones (all densities)

- Tablets (all sizes)

- Laptops & hybrids (keyboard only navigation is fully supported)

CPU Arch


- x86 (Intel)



  Some features are only available on rooted devices, but root access is not required.


Both paid & free versions

  STORAGE   Modify or delete the contents of your usb storage
  SYSTEM TOOLS   Test access to protected storage
  These are used to list files on the device storage areas (sdcard and usb drives).
  They are also used for creating and deleting files in those storage areas.

Free version only

  NETWORK COMMUNICATION   Full network access
  This is required by ad networks to use the internet connection to serve ads.
  NETWORK COMMUNICATION   View network connections
  This is used by the ad networks to detect if the device is using WIFI or not.

LAN Plugin

  NETWORK COMMUNICATION   Full network access
  This is used to connect to the network shares.
  NETWORK COMMUNICATION   View network connections
  This is used to check if WIFI is available and turned on.
  AFFECTS BATTERY   Prevent device from sleeping
  This is used to keep the network connection alive when transferring a large file.

Dropbox, OneDrive & Google Drive Plugins

  NETWORK COMMUNICATION   Full network access
  This is used to connect to the cloud service.
  AFFECTS BATTERY   Prevent device from sleeping
  This is used to keep the network connection alive when transferring a large file.