Skip to content

Commit

Permalink
Merge pull request #28 from x0b/dev-x0b
Browse files Browse the repository at this point in the history
Update 1.9.2
  • Loading branch information
x0b authored Nov 2, 2019
2 parents 59e91ff + 7b89d0e commit 9d680fb
Show file tree
Hide file tree
Showing 20 changed files with 75 additions and 42 deletions.
75 changes: 43 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
# RcloneExplorer
[![license: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://github.com/x0b/rcloneExplorer/blob/master/LICENSE) [![Github Releases](https://img.shields.io/github/downloads/x0b/rcloneExplorer/total.svg)](https://github.com/x0b/rcloneExplorer/releases) [![GitHub release](https://img.shields.io/github/v/release/x0b/rcloneExplorer?include_prereleases)](https://github.com/x0b/rcloneExplorer/releases/latest)

rclone explorer for Android
A Rclone based file explorer for Android

>**Note:**
>This is a modified build of rcloneExplorer because of little activity in the parent repo. For the parent repository, see [kaczmarkiewiczp/rcloneExplorer](https://github.com/kaczmarkiewiczp/rcloneExplorer).
>
>If you encounter an issue with a [version published here](https://github.com/x0b/rcloneExplorer/releases), [open an issue here](https://github.com/x0b/rcloneExplorer/issues/new).
> **Security Notice:** Please make sure that you are running rcloneExplorer **1.9.0** or newer ([more details](https://github.com/x0b/rcloneExplorer/wiki/Security-Notice-201901:-Remote-contents-readable-from-local-network-when-browsing-any-remote-with-thumbnails-enabled.)).
## SECURITY NOTICE
If you are running rcloneExplorer **1.3.5** to **1.8.2**, or AIS-synchro make sure that "Show thumbnails" in ```Settings``` > ```General``` is **disabled** and update to the latest version. If you have not enabled thumbnails, you are not affected.
More details in [Security Notice 201901: Remote contents readable from local network when browsing any remote with thumbnails enabled](https://github.com/x0b/rcloneExplorer/wiki/Security-Notice-201901:-Remote-contents-readable-from-local-network-when-browsing-any-remote-with-thumbnails-enabled.).

Features
--------

Cloud Access | 256 Bit AES Encryption | Integrated Experience
:-----:|:--------------:|:-----------:
<img src="https://github.com/x0b/rcloneExplorer/blob/master/docs/cloud-computing.png?raw=true" alt="Cloud Access" width="192" /> | <img src="https://github.com/x0b/rcloneExplorer/blob/master/docs/locked-padlock.png?raw=true" alt="256 Bit AES End-to-End Encryption" width="144" /> | <img src="https://github.com/x0b/rcloneExplorer/blob/master/docs/smartphone.png?raw=true" alt="Integrated Experience" width="176"/>
Use your cloud storage as if it were a local folder | Keep your files private on any cloud provider | Open your files or send them to the cloud with other apps

### Full list
- File Management
- List and view files
- Download and upload files
Expand All @@ -35,18 +36,42 @@ Features
- Supports SDK 21+ (Lollipop 5.0)
- Supports Storage Access Framework (SAF) ([see docs](https://github.com/x0b/rcloneExplorer/wiki#adding-local-storage-saf))

Screenshots
-----------
Remotes|File Editing|File Explorer|File Upload
:-----:|:--------------:|:-----------:|:---------:|
![screenshot1](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_1.png?raw=true)|![screenshot4](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_4.png?raw=true)|![screenshot2](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_2.png?raw=true)|![screenshot3](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_3.png?raw=true)

Dark Theme|File Editing|Encrypted Config| Empty Folder
:----------:|:----------:|:--------:|:-------------:|
![screenshot7](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_7.png?raw=true)|![screenshot8](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_8.png?raw=true)|![screenshot10](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_10.png?raw=true) | ![screenshot9](https://github.com/x0b/rcloneExplorer/blob/master/docs/screenshot_9.png?raw=true) |


Installation
------------
Grab the [latest version](https://github.com/x0b/rcloneExplorer/releases/latest) of the signed APK and install it on your phone. Only devices running Android Lollipop 5.0 and up are supported.

| CPU architecture | Where to find | APK prefix |
|:---|:--|:---:|
|ARM 32 Bit | older or low-cost devices | ```armv7a``` |
|ARM 64 Bit | most newer devices | ```armv8a``` |
|x86 32 Bit | some TV boxes and tablets | ```x86``` |
|x86_64 | some emulators | ```x86_64``` |

If you don't know which version to pick use ```rcloneExplorer-<version>-fatapk-release.apk```. Most devices run ARM 64 Bit, and 64 Bit devices often can also run the respective 32 bit version at lower performance.


Roadmap
------------
Note that these plans are subject to change and might not materialize completely or at all.

#### Current Version (1.9.1)
- Update to Rclone v1.49.5
- Fix: Crash in LoadingDialog (#21)
- Fix: Rclone serve not starting correctly (#22)
- Fix: Crash from robotest (#23)
#### Current Version (1.9.2)
- Enabled SAF DCA: faster directory lists & more
- Fix: Crash when upload from directory that is no longer accessible
- Fix: Creating a public link also toggles "wrap filenames"
- Fix: OAuth configurations not working. Rclone reset to 1.49.3 [due to incompatibility](#known-issues)

#### Next Version
- New SAF implementation for much faster directory access
- Bug fixes

#### Next Month(s)
Expand All @@ -58,31 +83,17 @@ Note that these plans are subject to change and might not materialize completely
- Reasonably regular updates of rclone
- F-Droid availability

Screenshots
-----------

Remotes|File Editing|File Explorer|File Upload
:-----:|:--------------:|:-----------:|:---------:|
![screenshot1](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_1.png?raw=true)|![screenshot4](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_4.png?raw=true)|![screenshot2](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_2.png?raw=true)|![screenshot3](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_3.png?raw=true)

Dark Theme|File Editing|Encrypted Config| Empty Folder
:----------:|:----------:|:--------:|:-------------:|
![screenshot7](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_7.png?raw=true)|![screenshot8](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_8.png?raw=true)|![screenshot10](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_10.png?raw=true) | ![screenshot9](https://github.com/kaczmarkiewiczp/rcloneExplorer/blob/master/screenshots/screenshot_9.png?raw=true) |

Installation
------------
Grab the [latest version](https://github.com/x0b/rcloneExplorer/releases/latest) of the signed APK and install it on your phone. Only devices running Android Lollipop 5.0 and up are supported.

If you don't know which version to pick use ```rcloneExplorer-fatapk-release.apk```.

Known Issues
------------
- OneDrive remotes can no longer be configured in the app and must be imported. You can configure them in Termux, copy the configuration file to an accessible destination and import from there.
- Rclone 1.49.4+ is currently [not compatible](https://github.com/rclone/rclone/issues/3686). An update is in the works and will be released with the next major version.

Contributing
------------
You can contribute by reporting any bugs and errors using the [issue tracker](https://github.com/x0b/rcloneExplorer/issues). Pull requests are welcome, but you have to accept a small CLA to ensure license compatibility.

This is a modified build of rcloneExplorer because of little activity in the parent repo. For the parent repository, see [kaczmarkiewiczp/rcloneExplorer](https://github.com/kaczmarkiewiczp/rcloneExplorer). If you encounter an issue with a [version published here](https://github.com/x0b/rcloneExplorer/releases), open an issue [here](https://github.com/x0b/rcloneExplorer/issues/new).

Credits/Libraries
-----------------
- [rclone](https://github.com/rclone/rclone) - "rsync for cloud storage"
Expand All @@ -93,4 +104,4 @@ Credits/Libraries
- [Material Design Icons](https://github.com/Templarian/MaterialDesign) - 2200+ Material Design Icons from the Community.
- [Recyclerview Animators](https://github.com/wasabeef/recyclerview-animators) - An Android Animation library which easily add itemanimator to RecyclerView items.
- [Toasty](https://github.com/GrenderG/Toasty) - The usual Toast, but with steroids.
- Icon made by [Smashicons](https://www.flaticon.com/authors/smashicons) from [Flaticon](https://www.flaticon.com)
- Icons from [Flaticon](https://www.flaticon.com) courtesy of [Smashicons](https://www.flaticon.com/authors/smashicons) and [Freepik](https://www.flaticon.com/authors/freepik)
6 changes: 3 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ android {
applicationId 'ca.pkay.rcloneexplorer.x0b'
minSdkVersion 21
targetSdkVersion 29
versionCode 33
versionName '1.9.1'
versionCode 34
versionName '1.9.2'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand Down Expand Up @@ -79,7 +79,7 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta04'
implementation 'androidx.recyclerview:recyclerview:1.1.0-rc01'
implementation 'com.google.android.material:material:1.0.0'
implementation 'com.leinardi.android:speed-dial:2.0.0'
implementation 'us.feras.mdv:markdownview:1.1.0'
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/assets/changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
### 1.9.2
* **New:** SAF DCA: faster directory lists & more
* **Fix:** Crash when upload from directory that is no longer accessible
* **Fix:** Creating a public link also toggles "wrap filenames"
* **Fix:** OAuth configurations not working
***

### 1.9.1
* **New:** Update to Rclone v1.49.5
* **Fix:** Crash in LoadingDialog
Expand Down
22 changes: 18 additions & 4 deletions app/src/main/java/ca/pkay/rcloneexplorer/FilePicker.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,11 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
root = current = new File(availableStorage.get(0));
}

fileList = new ArrayList<>(Arrays.asList(current.listFiles()));
File[] files = current.listFiles();
fileList = new ArrayList<>();
if (null != files) {
fileList.addAll(Arrays.asList(files));
}
sortDirectory();

RecyclerView recyclerView = findViewById(R.id.file_picker_list);
Expand Down Expand Up @@ -255,7 +259,10 @@ public void onBackPressed() {
actionBar.setTitle(current.getName());
}
fileList.clear();
fileList.addAll(Arrays.asList(current.listFiles()));
File[] files = current.listFiles();
if (null != files) {
fileList.addAll(Arrays.asList(files));
}
sortDirectory();
filePickerAdapter.setNewData(fileList);

Expand Down Expand Up @@ -320,7 +327,10 @@ public void onPositive(String tag, String input) {
File newDir = new File(current.getAbsolutePath() + "/" + input);
if (newDir.mkdir()) {
fileList.clear();
fileList.addAll(Arrays.asList(current.listFiles()));
File[] files = current.listFiles();
if (null != files) {
fileList.addAll(Arrays.asList(files));
}
sortDirectory();
filePickerAdapter.setNewData(fileList);
}
Expand Down Expand Up @@ -366,7 +376,11 @@ private void switchStorage(int which) throws IOException {
throw new IOException("Location not accessible");
}
root = current = newStorage;
fileList = new ArrayList<>(Arrays.asList(current.listFiles()));
File[] files = current.listFiles();
fileList = new ArrayList<>();
if (null != files) {
fileList.addAll(Arrays.asList(files));
}
sortDirectory();
filePickerAdapter.setNewData(fileList);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
return true;
case R.id.action_link:
new LinkTask().execute(directoryObject.getCurrentPath());
return true;
case R.id.action_wrap_filenames:
wrapFilenames(item);
return true;
Expand Down
Binary file added docs/cloud-computing.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/locked-padlock.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
Binary file added docs/smartphone.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions safdav/src/main/java/io/github/x0b/safdav/SafDAVServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import io.github.x0b.safdav.file.SafConstants;
import io.github.x0b.safdav.file.SafException;
import io.github.x0b.safdav.file.SafItem;
import io.github.x0b.safdav.saf.DocumentsContractAccess;
import io.github.x0b.safdav.saf.ProviderPaths;
import io.github.x0b.safdav.saf.SafFileAccess;
import io.github.x0b.safdav.xml.XmlResponseSerialization;

import java.io.InputStream;
Expand All @@ -36,7 +36,7 @@ public class SafDAVServer extends NanoHTTPD {
@Deprecated
public SafDAVServer(int port, Context context) {
super(hostname, port);
itemAccess = new SafFileAccess(context);
itemAccess = new DocumentsContractAccess(context);
this.paths = new ProviderPaths(context);
respSerializer = new XmlResponseSerialization();
}
Expand All @@ -51,7 +51,7 @@ public SafDAVServer(int port, Context context) {
*/
public SafDAVServer(int port, String username, String password, Context context) {
super(hostname, port);
itemAccess = new SafFileAccess(context);
itemAccess = new DocumentsContractAccess(context);
this.paths = new ProviderPaths(context);
respSerializer = new XmlResponseSerialization();
this.requiredAuthHeader = "Basic " + Base64.encodeToString(
Expand Down

0 comments on commit 9d680fb

Please sign in to comment.